내가 알고 있는 경우가 dictionary of keys 구성된 정렬하려면 &. 값뿐만 by value. 예를 들어, I have a 해시라고 각 단어 및 주파수, 내가 바라는 건 오더하려면 빈도별.
There is a '좋은' 을 스페인들리스트 단일 밸류급 (말하도다 주파스), 내가 바라는 건 다시 매핑하려면 말을해야합니다.
[스페인디스티오나리] (http://msdn.microsoft.com/en-us/library/f7fta44c.aspx) 에 의해 명령이라구요 키 값이 아닌. [맞춤형 교육] 를 일부 리조트 (http://www.codeproject.com/KB/recipes/lookupcollection.aspx), 하지만 더 좋은 방법이 있나요?
사용:
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);
}
);
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 대, 2010%, etc. 네 말을 사용하는 경우 '또는', '조항이 포함될 수 있습니다' 의 주파수 인덱스화할 앞서 유형 스테이츠비트 잘 알려져 있다.
를 통해 보다 높은 수준의 다른 선택의 여지가 없습니다 전체 사전, 각 값마다 걸어 보세요.
아마 이) 의 장점은 다음과 같습니다. http://bytes.com/forum/thread563638.html Copy/Pasting 에서 존 팀니:
"'c # Dictionary<, 문자열, string>. s = new Dictionary<, 문자열, string> ();; 스트라다 (";; a 1" " Item"). 스트라다 (,, c, 2" " " Item"). 스트라다 (";; b " 3" Item").
List< KeyValuePair<, 문자열, string> >;; ,, (s) = new List< 미리스트 KeyValuePair< 문자열이어야 string> >. 미리스트리소르타 ( 위임합니다 (KeyValuePair<, 문자열, string>. 퍼스트파이어, KeyValuePair<, 문자열, string>. 네스테파이어) { 퍼스트페이리바루e.콤파레토 반품하십시오 (네스테파이리발루); } ); "'
사전에 함목과 정렬할 수 없습니다. Net 에서는 구현되고 해스터블 - 이 자료 구조 사전 클래스 정의에 의해 수 없습니다.
이렇게 (키) - 컬렉션을 반복할 수 있어야 하는 경우, 이진 탐색 트리 구현되고 있는 스페인디스티오나리 사용해야 합니다.
그러나 네 경우엔 소스 구조가 있기 때문에, 다른 필드로 의해 정렬할지 무관하지 않다. 계속 필요한 것과 정렬하려면 빈도별 및 it 관련 새로운 컬렉션을 통해 넣어 정렬할지 필드 (주파수). 따라서 이 말은 이 주파수의 키와 값을 컬렉션. 가질 수 있기 때문에 많은 단어를 동일한 주파수 (얻을 수 있으며 이를 사용하려는 키) 를 사용하여 delaymins 괜찼습니다 사전 disk_b_s10database 스페인디스티오나리 (필요로 하는 고유 키). 이렇게 하면 수신기마다 스페인들리스트.
더 복잡한 구조를 가지고 있었다 (더 필드) 의 객체에는 경우 컬렉션을 진실이며당신이 수 있도록 필요한 여러 가지 분야를 키를 사용하여 patran / 정렬하려면 효율적으로 이용하게 하는 것이라고 사용자 정의 데이터 구조를 이룬다 - 당신은 아마도 덮어쓰기와 汲摹窍妨绰 O (1) 기본 구조 및 제거 (링케드리스트) 및 여러 인덱스화를 - / / 스페인디크티오나리스 삽입에서 사전을 스페인들리츠. 이 중 하나를 사용하여 클래스를 사용하여 복잡한 indexe 아니하였으매 필드용 핵심적인 역할을 한 및 포인터입니다 / 대한 참조를 YourClass> LinkedListNode<; 링케드리스트 있는 값으로.
삽입 및 제거를 할 때와 좌표계나 동기화되도록 indexe 유지하기 위한 기본 모음 (링케드리스트) 및 제거를 비싸다구요 I&; d # 39 약간만이라도 예쁜 것 같아요. 그러나 이러한 상황은 어떻게 때 짐이 되기 위한 데이터베이스 인덱스 작동합니까 - 그들은 환상적인 조회를 수행하는 데 필요한 많은 제이션스 및 삭제.
위의 모든 것은 단지 자리맞춤 대량 처리를 할 경우 일부 조회 할 것 같습니다. 그럼 그냥 한 번 할 수 있는 경우에만 그 출력입니다 빈도별 정렬할지 (익명) 튜플을 목록을 만듭니다.
var dict = new SortedDictionary<string, int>();
// ToDo: populate dict
var output = dict.OrderBy(e => e.Value).Select(e => new {frequency = e.Value, word = e.Key}).ToList();
foreach (var entry in output)
{
Console.WriteLine("frequency:{0}, word: {1}",entry.frequency,entry.word);
}
값을 정렬하려면
이 책 값을 어떻게 정렬하려면 사전이란다 비주얼 스튜디오, 우리가 지켜보리니 컴파일하십시오 콘솔 프로그램을 실행할 수 있습니다. 그 후 그 값을 통해 새롭게 키를 신규인지 사전. 즉, 어떤 식으로든 정렬할지 사전 인스턴스들도 xam 않습니다. 우리는 러더비 키워드여야 사용합니다를 LINQ 쿼리가 발표했다.
러더비 조항 [C #] 신규인지 사전 프로그램입니다.
using System;
using System.Collections.Generic;
using System.Linq;
class Program
{
static void Main()
{
// Example dictionary.
var dictionary = new Dictionary<string, int>(5);
dictionary.Add("cat", 1);
dictionary.Add("dog", 0);
dictionary.Add("mouse", 5);
dictionary.Add("eel", 3);
dictionary.Add("programmer", 2);
// Order by values.
// ... Use LINQ to specify sorting by value.
var items = from pair in dictionary
orderby pair.Value ascending
select pair;
// Display results.
foreach (KeyValuePair<string, int> pair in items)
{
Console.WriteLine("{0}: {1}", pair.Key, pair.Value);
}
// Reverse sort.
// ... Can be looped over in the same way as above.
items = from pair in dictionary
orderby pair.Value descending
select pair;
}
}
출력입니다
dog: 0
cat: 1
programmer: 2
eel: 3
mouse: 5
'정렬' 목록 '에' (VB.NET) 를 사용하여 통제를 스페인디스티오나리 바인딩하도록 목록보기:
Dim MyDictionary As SortedDictionary(Of String, MyDictionaryEntry)
MyDictionaryListView.ItemsSource = MyDictionary.Values.OrderByDescending(Function(entry) entry.MyValue)
Public Class MyDictionaryEntry ' Need Property for GridViewColumn DisplayMemberBinding
Public Property MyString As String
Public Property MyValue As Integer
End Class
XAML:
<ListView Name="MyDictionaryListView">
<ListView.View>
<GridView>
<GridViewColumn DisplayMemberBinding="{Binding Path=MyString}" Header="MyStringColumnName"></GridViewColumn>
<GridViewColumn DisplayMemberBinding="{Binding Path=MyValue}" Header="MyValueColumnName"></GridViewColumn>
</GridView>
</ListView.View>
</ListView>
가장 쉬운 방법은 사전이 내장되어 스페인디스티오나리 정렬할지 사용할 수 있는 '' 클래스:
//Sorts sections according to the key value stored on "sections" unsorted dictionary, which is passed as a constructor argument
System.Collections.Generic.SortedDictionary<int, string> sortedSections = null;
if (sections != null)
{
sortedSections = new SortedDictionary<int, string>(sections);
}
'스페인드체티언스' 은 '에는' 단면에는 정렬할지 버전니다.
다른 경우, 모든 것이 좋은 대답이 운영까지도 투명지에 " temporary"; 목록 정렬할지 by Value. 그러나 스케쳐내 '키' 가 함께 할 수 있는 사전 정렬할지 automatically synchronizes 의해 '가치', 즉 다른 사전 정렬할지 [',' Bijection<, K1, K2> 클래스] 사용할 수 있습니다 (http://ecsharp.net/doc/code/classLoyc_1_1Collections_1_1Bijection.html).
',' 기존 2 개, K1, K2> Bijection< 취합은 초기화하려면 있습니다 그래서 스케쳐내 사전, 그 중 하나가 될 수 있고, 다른 하나는 정렬할지 운영까지도 정렬하지 않음, 전단사 함수 같은 코드를 사용하여 만들 수 있습니다.
var dict = new Bijection<Key, Value>(new Dictionary<Key,Value>(),
new SortedDictionary<Value,Key>());
사용할 수 있습니다 '정상' 딕트 디바이스처럼 사전 (,, 'K' IDictionary< 구현하는 V>), 그리고 ',' 을 " 내려받습니다 호출하십시오 딕트그린버스 inverse". 사전 원하는거요 정렬할지 의해 '가치'.
',' 일부인 K1, K2> Bijection<, [로이충콜레스티온s.들러] (http://core.loyc.net/), 수 있지만 단순히 스케쳐내 복사합니다를 [소스 코드] (https://github.com/qwertie/Loyc/blob/master/Core/Loyc.Collections/Other/Bijection.cs) 를 자신의 프로젝트.
예를 들어, 우리는 등 사전
Dictionary<int, int> dict = new Dictionary<int, int>();
dict.Add(21,1041);
dict.Add(213, 1021);
dict.Add(45, 1081);
dict.Add(54, 1091);
dict.Add(3425, 1061);
sict.Add(768, 1011);
Dictionary<int, int> dctTemp = new Dictionary<int, int>();
foreach (KeyValuePair<int, int> pair in dict.OrderBy(key => key.Value))
{
dctTemp .Add(pair.Key, pair.Value);
}
실제로 C # 의 힘, 사전 정렬 () 메서드를 가지고, 더 관심이 많은 값뿐만 정렬할 때 키 값을 얻을 수 제공하십시오 때까지 한마디로 그들을 반복할 수 있어야 합니다.
var items = new Dictionary<string, int>();
items.Add("cat", 0);
items.Add("dog", 20);
items.Add("bear", 100);
items.Add("lion", 50);
// Call OrderBy method here on each item and provide them the ids.
foreach (var item in items.OrderBy(k => k.Key))
{
Console.WriteLine(item);// items are in sorted order
}
당신이 할 수 있는 하나의 트릭,
var sortedDictByOrder = items.OrderBy(v => v.Value);
또는
var sortedKeys = from pair in dictName
orderby pair.Value ascending
select pair;
또한, 어떤 종류의 값을 저장하는 틀렸다니까 달려 있다. 이 같은 문자열, int) 는 단일 또는 다중 (그것을비유하사 목록, 스토리지, 사용자 정의 클래스), 그런 경우 단일 정렬하려면 적용하십시오 목록을 만들 수 있습니다. 사용자 정의 클래스를 경우 그 클래스용 이콩파레이블 구현해야 합니다, 'ClassName: ',' 와 'icomparable< ClassName> 오버라이드합니다 콩파레토 (ClassName c). 이들은 보다 더 LINQ 등의 객체 지향.