Πώς μπορώ να πάρω ένα κλειδί λεξικού με βάση την τιμή σε C#;
Dictionary<string, string> types = new Dictionary<string, string>()
{
{"1", "one"},
{"2", "two"},
{"3", "three"}
};
Θέλω κάτι τέτοιο:
getByValueKey(string value);
getByValueKey("one")
πρέπει να επιστρέφει "1"
.
Ποιος είναι ο καλύτερος τρόπος για να γίνει αυτό; Ίσως HashTable, SortedLists?
Οι τιμές δεν πρέπει απαραίτητα να είναι μοναδικές, οπότε πρέπει να κάνετε μια αναζήτηση. Μπορείτε να κάνετε κάτι τέτοιο:
var myKey = types.FirstOrDefault(x => x.Value == "one").Key;
Αν οι τιμές είναι μοναδικές και εισάγονται λιγότερο συχνά από ότι διαβάζονται, τότε δημιουργήστε ένα αντίστροφο λεξικό όπου οι τιμές είναι κλειδιά και τα κλειδιά είναι τιμές.
Μπορείς να το κάνεις αυτό:
KeyValuePair<TKey, TValue>
's στο λεξικό (το οποίο θα είναι ένα σημαντικό χτύπημα απόδοσης αν έχετε πολλές καταχωρήσεις στο λεξικό)Χρησιμοποιήστε τη μέθοδο 1 εάν η απόδοση δεν είναι σημαντικός παράγοντας, χρησιμοποιήστε τη μέθοδο 2 εάν η μνήμη δεν είναι σημαντικός παράγοντας.
Επίσης, όλα τα κλειδιά πρέπει να είναι μοναδικά, αλλά οι τιμές δεν απαιτείται να είναι μοναδικές. Μπορείτε να έχετε περισσότερα από ένα κλειδιά με την καθορισμένη τιμή.
Υπάρχει κάποιος λόγος που δεν μπορείτε να αντιστρέψετε τη σχέση κλειδιού-τιμής;
Έχω έναν πολύ απλό τρόπο για να το κάνω αυτό. Δούλεψε τέλεια για μένα.
Dictionary<string, string> types = new Dictionary<string, string>();
types.Add("1", "one");
types.Add("2", "two");
types.Add("3", "three");
Console.WriteLine("Please type a key to show its value: ");
string rLine = Console.ReadLine();
if(types.ContainsKey(rLine))
{
string value_For_Key = types[rLine];
Console.WriteLine("Value for " + rLine + " is" + value_For_Key);
}