2010-02-17 2 views
0

는이 전 theList에서 사전을 구성하는 쉬운 방법이있는C# 사전 구성

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

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

의 arbitray 목록이 있다고 가정 해 봅시다? (다음과 같이) 나는 다음과 같은 코드를 작성하지 않으

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

:리스트가 가장 확실히 다음 IEnumerable<A>입니다

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

답변

9

여기에 Enumerable.ToDictionary이 있습니다.

는이처럼 사용

Dictionary<string, string> dict = theList.ToDictionary(e => e.K, e => e.V); 
+1

+1 : 마법도 자신의 질문 :-) –

+1

니스 비슷합니다. 나는 새로운 것도 배웠다. 그러나 나는 그것이'e => e.V'이어야한다고 생각합니다. –

+0

@Joel B Fant : 아니요, 'e => e.V'가되어서는 안됩니다. 그러면 그 값은 A의 인스턴스가되는 V로 사전에 키가됩니다. – casperOne

4

합니다. 당신과 같이 .NET 3.5 너머을 System.Linq 네임 스페이스에 열거 가능한 클래스에 ToDictionary 확장 방법을 사용합니다 :

당신에게 키가 K 속성의 값입니다 사전을 줄 것이다
Dictionary<string, string> d = theList.ToDictionary(a => a.K, a => a.V); 

, 값은 V 특성의 값입니다.

-2
Dictionary<string,string> dict = new Dictionary<string,string>(); 

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

약간 짧은,하지만 여전히 기본적으로 for-each 루프. 나는 ToDictionary() 솔루션을 더 좋아한다.

+0

@Joel B Fant : LINQ가 ToDictionary 확장 메서드를 제공하므로이 작업을 수행 할 이유가 없습니다. – casperOne

+0

동의했으나 지금까지 그 사실을 알지 못했습니다. –

1

Enumarable.ToDictionary<TSource,TKey> 당신이 찾고있는 무엇 :

theList.ToDictionary(x => x.K, x => x.V); 
+0

설명의 요점과 마찬가지로, IEnumerable.ToDictionary가 아닌 Enumerable.ToDictionary입니다. –

+0

@Adam Robinson - 수정 해 주셔서 감사합니다. – Oded

1
var dict = theList.Cast<A>().ToDictionary(a => a.K, a => a.V); 
1
Dictionary<string, string> dict = theList.ToDictionary(x => x.K , x=> x.V);