Подтвердить что ты не робот

С#: получить первый ключ из словаря <string, string>

Я использую System.Collections.Generic.Dictionary<string, string>.

Я хочу вернуть первый ключ из этого словаря. Я попробовал dic.Keys[0], но единственное, что у меня есть в свойстве Keys (которое является объектом KeyCollection), является перечислителем.

Нужно ли перечислять все ключи, чтобы получить первый?

4b9b3361

Ответ 1

Предполагая, что вы используете .NET 3.5:

dic.Keys.First();

Обратите внимание, что нет гарантированного порядка, в котором пары ключ/значение будут итерации в словаре. Вы вполне можете обнаружить, что во многих случаях вы получаете первый ключ, который вы вкладываете в словари, но вы абсолютно не должны полагаться на это. Как говорит Скирван, на самом деле нет понятия "первый". В сущности, вышеизложенное даст вам "ключ от словаря" - это все, что гарантировано.

(Если вы не знаете, что словарь пуст или нет, вы можете использовать FirstOrDefault.)

Ответ 2

Идея "first" на самом деле не применяется к словарю, так как упорядочения записей нет; любая вставка или удаление позволяет радикально изменить порядок ключей.

Ответ 3

Во-первых, нет, вам не нужно перечислять все записи - просто перечислите первый элемент:

IEnumerator enumerator = dictionary.Keys.GetEnumerator();
enumerator.MoveNext();
object first = enumerator.Current;

В идеале можно проверить, что MoveNext() на самом деле преуспел (он возвращает bool), иначе может вызвать вызов Current.

Также обратите внимание, что порядок дубликатора не указан. Это означает, что "первым" элементом может быть любой ключ, может быть другим при последующих вызовах (хотя на практике это не будет) и, безусловно, изменится по мере добавления и удаления элементов из словаря.

Ответ 4

Кажется немного выше, но как насчет

foreach (<Type> k in dic.Keys)
    return k;