나는 종종 키와 값으로 구성된 사전을 값으로 정렬해야합니다. 예를 들어, 나는 단어와 해시의 해시를 가지고 있는데, 나는 빈도별로 주문하고 싶다.
이 SortedList
내가 다시 말에 매핑 할 것인지, 단일 값 (예를 들어 주파수)에 대한 좋은이다.
값이 아닌 키를 기준으로 정렬 된 사전 순서. 일부는 커스텀 클래스에 의존 하지만 더 깨끗한 방법이 있습니까?
답변
사용하다:
using System.Linq.Enumerable;
...
List<KeyValuePair<string, string>> myList = aDictionary.ToList();
myList.Sort(
delegate(KeyValuePair<string, string> pair1,
KeyValuePair<string, string> pair2)
{
return pair1.Value.CompareTo(pair2.Value);
}
);
.NET 2.0 이상을 대상으로하기 때문에이를 람다 구문으로 단순화 할 수 있습니다. 이는 동등하지만 짧습니다. .NET 2.0을 대상으로하는 경우 Visual Studio 2008 이상의 컴파일러를 사용하는 경우에만이 구문을 사용할 수 있습니다.
var myList = aDictionary.ToList();
myList.Sort((pair1,pair2) => pair1.Value.CompareTo(pair2.Value));
답변
LINQ 사용 :
Dictionary<string, int> myDict = new Dictionary<string, int>();
myDict.Add("one", 1);
myDict.Add("four", 4);
myDict.Add("two", 2);
myDict.Add("three", 3);
var sortedDict = from entry in myDict orderby entry.Value ascending select entry;
또한 상위 10, 20 10 % 등을 선택할 수 있다는 점에서 유연성이 뛰어납니다. 또는에 대한 단어 빈도 색인을 사용하는 경우 절도 type-ahead
포함 할 수 있습니다 StartsWith
.
답변
var ordered = dict.OrderBy(x => x.Value);
답변
둘러보고 C # 3.0 기능을 사용하면 다음과 같이 할 수 있습니다.
foreach (KeyValuePair<string,int> item in keywordCounts.OrderBy(key=> key.Value))
{
// do something with item.Key and item.Value
}
이것은 내가 본 가장 깨끗한 방법이며 해시를 처리하는 루비 방법과 비슷합니다.
답변
값을 기준으로 사전을 정렬하고 다시 저장하면됩니다 (따라서 사전에 값이 순서대로 나옵니다).
dict = dict.OrderBy(x => x.Value).ToDictionary(x => x.Key, x => x.Value);
물론 정확하지는 않지만 작동합니다.
답변
높은 수준에서 전체 사전을 살펴보고 각 값을 보는 것 외에 다른 선택은 없습니다.
아마도 이것이 도움이 될 것입니다 :
http://bytes.com/forum/thread563638.html
John Timney의 복사 / Pasting :
Dictionary<string, string> s = new Dictionary<string, string>();
s.Add("1", "a Item");
s.Add("2", "c Item");
s.Add("3", "b Item");
List<KeyValuePair<string, string>> myList = new List<KeyValuePair<string, string>>(s);
myList.Sort(
delegate(KeyValuePair<string, string> firstPair,
KeyValuePair<string, string> nextPair)
{
return firstPair.Value.CompareTo(nextPair.Value);
}
);
답변
어쨌든 사전을 정렬 할 수 없습니다. 그들은 실제로 주문되지 않았습니다. 사전에 대한 보장은 키 및 값 콜렉션이 반복 가능하며 인덱스 또는 키로 값을 검색 할 수 있지만 특정 순서를 보장하지는 않습니다. 따라서 이름 값 쌍을 목록으로 가져와야합니다.