Это должно сработать:
d.Keys.ToList().IndexOf("c");
Обратите внимание, что поиск по времени O (1), предлагаемый Словарём, теряется при преобразовании в Список, потому что Списки по своей сути O (n).Поэтому, если в вашем Словаре большое количество элементов, вам, вероятно, лучше использовать другое измерение словаря или матрицы для хранения позиций, поскольку их получение таким образом, вероятно, будет медленнее.На самом деле, вы, вероятно, должны предположить, что приведенная выше строка одинакова:
GetDictKeyPos(d, "c");
public int GetDictKeyPos(Dictionary<string, int> d, string key)
{
for (int i = 0; i < d.Count; ++i)
{
if (d.ElementAt(i).Key == key)
return i;
}
return -1;
}
В качестве примечания , если вы пытаетесь получить позицию, вы, вероятно,сделав предположение, что положение сохранено.Microsoft говорит, что не рассчитывайте на это, но на практике вы обнаружите, что, вероятно, можете рассчитывать на это.(Я никогда не видел, чтобы положение не было сохранено.) При этом, пока Microsoft не признает, что: «Да, да, мы держимся за вас: положение фактически сохраняется в словаре. Мы просто не хотелиПризнайте это, потому что мы хотели иметь возможность изменить его, если мы нашли лучшую реализацию, но теперь мы знаем, что собираемся оставить это, так что вы идете ... ", вы, вероятно, не должны предполагать, что позиция сохранена.
Наконец, если вы планируете использовать свои шансы и предполагаете, что они сохранены, и вы также планируете использовать вышеуказанный метод для получения позиции, то вместо этого рассмотрите возможность сохранения ключей в списке, поскольку время поиска будетбыть таким же, и порядок списка гарантированно будет сохранен.