内部の+値は、我々が何をしたいリストをソート
var dictionary= new Dictionary<int, IList<int>>();
を持っていると仮定して、キーで辞書
など。
1 2, 1, 6
5 2, 1
2 1, 3
1 1, 2, 6
2 1, 3
5 1, 2
になり、私はforeach
の内側にそれをやってみましたが、明らかにこれはあなたが反復されているものを変更することは悪い考えです。
内部の+値は、我々が何をしたいリストをソート
var dictionary= new Dictionary<int, IList<int>>();
を持っていると仮定して、キーで辞書
など。
1 2, 1, 6
5 2, 1
2 1, 3
1 1, 2, 6
2 1, 3
5 1, 2
になり、私はforeach
の内側にそれをやってみましたが、明らかにこれはあなたが反復されているものを変更することは悪い考えです。
はこれを試してみてください:
// Creating test data
var dictionary = new Dictionary<int, IList<int>>
{
{ 1, new List<int> { 2, 1, 6 } },
{ 5, new List<int> { 2, 1 } },
{ 2, new List<int> { 2, 3 } }
};
// Ordering as requested
dictionary = dictionary
.OrderBy(d => d.Key)
.ToDictionary(
d => d.Key,
d => (IList<int>)d.Value.OrderBy(v => v).ToList()
);
// Displaying the results
foreach(var kv in dictionary)
{
Console.Write("\n{0}", kv.Key);
foreach (var li in kv.Value)
{
Console.Write("\t{0}", li);
}
}
これは2つの理由で間違っています。 1つは、それらを辞書に戻すことによって、あなたは再び彼の優先順位を損なうことになります。 2つ目は、 'IOrderedEnumerable
本当にToListコールが欠落していました。しかし、注文は維持されます。 – Schiavini
しかし、最後に 'ToDictionary'を呼び出すことで、アイテムを順序付けられていないコレクションに戻しています。 「働く」部分は偶然であり、文書化されていない。実装が変更される可能性があります。覚えておくべきことは**辞書は定義上順序付けされていないコレクション**です。 [参照](http://stackoverflow.com/questions/1453190/does-the-enumerator-of-a-dictionarytkey-tvalue-return-key-value-pairs-in-the) – nawfal
Dictionary
はソートされていません。辞書を並べ替えるには、OrderedDictionary
を使用します。リストをソートする
、あなたは辞書項目をList<T>.OrderBy()
これは、キー部分のみのソートを解決するでしょうか? –
-1:質問には答えられません。もう一度お読みください。 OPはディクショナリをソートしたくない、ソートされたものだけを出力したいだけです。 – leppie
@leppieもう一度読んだ。それでも、OPは明示的に彼/彼女は "それのソート版"を望んでいると言います。辞書のソートされたバージョンは、まあ、行くと推測されます。とにかくdownvoteありがとう。 –
することができますループを使用して、別々に各リストを並べ替えることができます。これは次のようになります:
SortDictionary(dictionary);その後
:
foreach (System.Collections.Generic.KeyValuePair<int,IList<int>> list in dictionary)
{
SortDictionary(list.Value)
}
あなたは、このような辞書の内容を注文するためにLINQを使用することができます。これは、もちろん
var dictionary = new Dictionary<int, IList<int>>();
var orderedItems = dictionary
.OrderBy(pair => pair.Key)
.Select(new {
Key = pair.Key,
Value = pair.Value.OrderBy(i => i)});
をむしろ醜い。この時点で、より良いオプションは、リストや配列として結果のIEnumerableを使用する必要がある場合は、ToListメソッドまたはてToArrayを使用して作成することができますLINQの構文に
var orderedItems =from pair in dictionary
orderby pair.Key
let values = pair.Value.OrderBy(i => i)
select new { Key = pair.Key, Value = values };
を使用することです。しかし、ほとんどの場合、IEnumerableをそのまま使用することができます
"ソートされたバージョンを取得したい" - _how_あなたはそれを望みますか?出力として、または新しいコレクションとして? –
質問を編集しました –