2012-05-30 2 views
-1

Могу ли я получить ключ хэш-таблицы по значению. Я пытаюсь найти и кодировать, но не добиться успеха. Любой может мне помочь.Как получить ключ хэш-таблицы по значению

Благодаря somuch

+0

Что вы имеете в виду? –

+7

У меня такое ощущение, что вы не используете правильную структуру данных для того, что вы пытаетесь достичь. –

+0

Хотя вопрос не сформулирован хорошо и имеет мало деталей, здесь есть отдельный, реальный вопрос. –

ответ

0

Вы должны вручную перебрать KeyValuePair<> с в словаре, пока не найдете соответствующее значение.

+0

Это будет dictionnary, а не хэш-таблица (но вопрос OP не имеет смысла, так что может быть и так). –

+1

@Cicada: Да; Я пытался тонко намекнуть, что OP должен использовать дженерики. – SLaks

3

Если вы используете Hashtable class, переписчик вернулся является IDictionaryEnumerator, который позволит вам сделать:

object key; 
foreach (DictionaryEntry entry in theHashTable) 
{ 
    if (entry.Value == theValue) 
    { 
     key = entry.Key; 
     break; 
    } 
} 

Это, как говорится, я настоятельно рекомендовал бы другую структуру данных. Если ничего другого, обновление до использования Dictionary<TKey, TValue> обеспечит безопасность типа, хотя вам все равно придется перебирать пункты KeyValuePair<TKey, TValue) в словаре, чтобы найти ключ, соответствующий значению.

+0

Более компактная версия, вероятно, будет 'myHashtable.Where (de => de.Value == theValue). Выберите (de => de.Key) .First()' –

+0

Обратите внимание, что может быть несколько разных ключей, которые все имеют одно и то же значение, поэтому, если вы вручную не убедитесь, что значения уникальны, вы не сможете определить, какая из клавиш соответствует определенному значению. – Servy

+0

@ AvnerShahar-Kashtan Это будет работать без '.Cast ()' перед вашим '.Where' –

Смежные вопросы