Junior — Middle
Πώς μπορούν να αποφευχθούν περιορισμοί μεγέθους ή περιορισμοί κατά τη χρήση κλειδιού σε ένα λεξικό;
sobes.tech AI
Απάντηση από AI
Στην C#, οι λεξικοί (Dictionary<TKey, TValue>) έχουν περιορισμούς στους τύπους των κλειδιών και το μέγεθός τους, για παράδειγμα, το κλειδί πρέπει να είναι hashable και να έχει σωστά υλοποιημένες τις μεθόδους GetHashCode και Equals.
Για να αποφύγετε περιορισμούς μεγέθους ή τύπου κλειδιού, μπορείτε:
- Να χρησιμοποιήσετε σύνθετα κλειδιά, π.χ., να δημιουργήσετε μια κλάση ή δομή που συνδυάζει πολλαπλές τιμές και να υλοποιήσετε σωστά τις μεθόδους
GetHashCodeκαιEqualsγι' αυτή. - Να μετατρέψετε μεγάλα ή πολύπλοκα κλειδιά σε πιο συμπαγείς αναπαραστάσεις, π.χ., να σειριοποιήσετε το αντικείμενο σε μια συμβολοσειρά ή να χρησιμοποιήσετε μια συνάρτηση κατακερματισμού.
- Να χρησιμοποιήσετε εξειδικευμένες συλλογές ή δομές δεδομένων αν το τυπικό λεξικό δεν είναι κατάλληλο.
Παράδειγμα σύνθετου κλειδιού:
struct CompositeKey
{
public int Id;
public string Name;
public override bool Equals(object obj) => obj is CompositeKey other && Id == other.Id && Name == other.Name;
public override int GetHashCode() => HashCode.Combine(Id, Name);
}
var dict = new Dictionary<CompositeKey, string>();
dict[new CompositeKey { Id = 1, Name = "Test" }] = "Value";