2012-03-23 2 views
1

LINQ를 사용하여 값으로 사전을 정렬하려고하지만 ToDictionary() 메서드의 작동 방식을 파악할 수 없습니다.vb.net에서 linq을 사용하여 값으로 사전 정렬

찾을 수있는 모든 예제는 C#에 있습니다.

여기

마지막으로, 나는 그냥 바보 깨달았다 내 코드

Dim f As Dictionary(Of String, String) = (From value In projectDescriptions.Values 
              Order By value Ascending 
              Select value).ToDictionary(???) 

UPDATE입니다. 죄송합니다

mylist.OrderBy(Function(x) x.Value).ToList() 

은 누군가에게

답변

3

예를 찾지 못했지만 MSDN here을 확인하십시오. 다음과 같은 것은 VB에서 작동해야합니다.

'not sure what the key is, but use whichever property you'd like 
Dim f As Dictionary(Of String, String) = 
     (From value In projectDescriptions.Values 
     Order By value Ascending 
     Select value).ToDictionary(Function(p) p.Key) 

그러나 다시 사전에 정렬 된 열거를 저장하는 경우, 그것은 정렬되지 않은된다, 즉 일반적으로 사전 또는 맵의 속성이고 사전이 너무 빨리 인기있는 이유를 자세히입니다. 정렬이 필요하다면 SortedDictionary을 대신 사용 하시겠습니까?

+0

네 말이 맞아, 나는 내 바보가 얼마나 어리 석 었는지 깨달았다. 죄송합니다 – Marc

3

을 도움이되기를 바랍니다 내가 (keyValuePair의 (문자열, 문자열))

그리고 내 목록을 정렬을 목록을했다

, 내가 당신의 수 단 SortedDictionary을 사용 하시겠습니까? 순서에 대해 어떠한 보증도하지 않습니다

dic.OrderBy(p => p.Value).ToDictionary(p => p.Key, p => p.Value); 
        // or .ToDictionary(p => p.Key); 
+0

키별로 정렬되지 않았습니까? – Marc

+0

자, 이제 해보겠습니다. – Marc

1

사전 적에게 동일한 무엇

// enumerate dic itself, not just dic.Values 
(from p in dic 
orderby p.Value ascending 
select new KeyValuePair<string, string>(p.Key, p.Value) 
// or new { Key = p.Key, Value = p.Value }) 
    .ToDictionary(p => p.Key, p => p.Value); 

: 다음과 같을 것이다 무엇을 달성하고자하는 C#에서 또한


항목 중. 나는 당신이 항목을 선택하고 그 KeyValuePairs의 목록으로 변환 제안 :

Dim f = projectDescriptions.OrderBy(Function(p) p.Value).ToList() 

업데이트 : 당신이 the documentation at MSDN 보면, 당신은 명시 적으로 항목이 반환되는 순서있는 "한다고 발견 할 것이다 정의되지 않았습니다 ". 정말. 을하지 마십시오.은 사전을 주문할 것으로 기대합니다.

+1

'List >'이 아닌'Dictionary ' – abatishchev

+0

왜이 대답은 downvoted 되었습니까? Botz이 맞습니다. 사전의 순서에 대한 보장이 없으므로 사전을 값순으로 정렬하는 것은 의미가 없습니다. –

+2

@abatishchev는 그가 제시 한 바로 그 것이 아닙니까? Botz의 텍스트를 참조하십시오. – Abel