Отличительные значения в словаре‹TKey,TValue›

Я пытаюсь перебрать отдельные значения по списку словарей:

Итак, у меня есть словарь пар ключ-значение.

Как получить только отдельные значения строковых ключей из списка словарей?


person Community    schedule 20.07.2009    source источник
comment
Вы имеете в виду различные значения? Если да, то решение Рандольфо правильное.   -  person Steven Sudit    schedule 20.07.2009
comment
JerryB: словаря C# не существует. Это словарь .NET.   -  person John Saunders    schedule 20.07.2009
comment
@JerryB: Это ужасно педантичное различие - и исходящее от меня, это о чем-то говорит! C# и .NET идут рука об руку. Их взаимозаменяемое использование не оказывает медвежью услугу VB, F# и IronPython.   -  person Randolpho    schedule 21.07.2009
comment
@Randolpho: думаю, ты хотел ответить здесь Джону Сондерсу, а не JerryB.   -  person Steven Sudit    schedule 21.07.2009
comment
@Стивен Судит: я думаю, ты прав. :)   -  person Randolpho    schedule 22.09.2010


Ответы (4)


var distinctList = mydict.Values.Distinct().ToList();

В качестве альтернативы вам не нужно вызывать ToList():

foreach(var value in mydict.Values.Distinct())
{
  // deal with it. 
}

Редактировать: я неправильно понял ваш вопрос и подумал, что вам нужны разные значения из словаря. Приведенный выше код обеспечивает это.

Ключи автоматически различаются. Так что просто используйте

foreach(var key in mydict.Keys)
{
  // deal with it
}
person Randolpho    schedule 20.07.2009
comment
Кажется, это самое близкое к тому, что, возможно, намеревался спросить JerryB. - person Steven Sudit; 20.07.2009

Ключи различны в словаре. По определению.

Итак, myDict.Keys — это отдельный список ключей.

person Philippe Leybaert    schedule 20.07.2009
comment
Дерьмо! Я совершенно неправильно понял вопрос. Я думал, что он хотел отличных значений. - person Randolpho; 20.07.2009
comment
Вопрос немного запутанный. различные значения строковых ключей? - person Philippe Leybaert; 20.07.2009
comment
JerryB спросил, как мне получить только отдельные значения строки KEYS - person Meta-Knight; 20.07.2009
comment
@Philippe Leybaert: я согласен; вводящий в заблуждение вопрос. Я предполагаю, что автору придется появиться и сообщить нам, что он действительно имел в виду. В любом случае, +1 за ваш ответ. - person Randolpho; 20.07.2009

Перебирая разные ключи и делая что-то с каждым значением...

foreach( dictionary.Keys )
{
    // your code
}

Если вы используете C# 3.0 и имеете доступ к LINQ:

Просто получение набора различных значений:

// you may need to pass Distinct an IEqualityComparer<TSource>
// if default equality semantics are not appropriate...
foreach( dictionary.Values.Distinct() )
{
}
person LBushkin    schedule 20.07.2009
comment
Словарные ключи уже гарантированно различны. Нет необходимости в вызове LINQ. - person Reed Copsey; 20.07.2009
comment
@Reed: Хорошо, но LINQ используется только для создания уникальных значений, а не ключей. - person Steven Sudit; 22.09.2010

Если словарь определен как:

Dictionary<string,MyType> theDictionary =  ...

Тогда вы можете просто использовать

var distinctKeys = theDictionary.Keys;

При этом используется свойство Dictionary.Keys. Если вам нужен список, вы можете использовать:

var dictionaryKeysAsList = theDictionary.Keys.ToList();

Поскольку это словарь, ключи уже будут различны.

Если вы пытаетесь найти все отдельные значения (в отличие от ключей - в вопросе это было неясно) в словаре, вы можете использовать:

var distinctDictionaryValues = theDictionary.Values.Distinct(); // .ToList();
person Reed Copsey    schedule 20.07.2009