C # Словарь Состав - PullRequest
       26

C # Словарь Состав

0 голосов
/ 17 февраля 2010

Допустим, у меня есть произвольный список A

class A
{
string K {get;set;}
string V {get;set;}
}

...
List<A> theList = ...

Есть ли простой способ составить словарь из списка? (что-то вроде следующего)

Dictionary<string, string> dict = magic(x => x.K, x => x.V, theList)

Я не хочу писать следующий код:

var d = new Dictionary<string, string>
foreach(var blah in theList)
    d[blah.K] = blah.V

Ответы [ 6 ]

9 голосов
/ 17 февраля 2010

Вот это: Enumerable.ToDictionary .

Вы используете это так:

Dictionary<string, string> dict = theList.ToDictionary(e => e.K, e => e.V);
4 голосов
/ 17 февраля 2010

Если список является IEnumerable<A>, то наиболее определенно. Вы бы использовали метод расширения ToDictionary в классе Enumerable в пространстве имен System.Linq в .NET 3.5 и более поздних версиях следующим образом:

Dictionary<string, string> d = theList.ToDictionary(a => a.K, a => a.V);

, который даст вам словарь, где ключом является значение в свойстве K, а значением является значение в свойстве V.

1 голос
/ 17 февраля 2010
Dictionary<string, string> dict = theList.ToDictionary( x => x.K , x=> x.V);
1 голос
/ 17 февраля 2010
var dict = theList.Cast<A>().ToDictionary(a => a.K, a => a.V);
1 голос
/ 17 февраля 2010

Enumarable.ToDictionary<TSource,TKey> - это то, что вы ищете:

theList.ToDictionary(x => x.K, x => x.V);
0 голосов
/ 17 февраля 2010
Dictionary<string,string> dict = new Dictionary<string,string>();

theList.ForEach( param => dict[param.K] = param.V );

Немного короче, но все же в основном петля for-each. Мне больше нравится решение ToDictionary().

...