2017-02-16 9 views
0

私はDictionary<int, Tuple<int, string, int, bool>>オブジェクトを持っていますが、私はどのように3番目の要素タプル値(私はTuple<int, string, int, bool>>の2番目の "int"を意味します)。タプルの要素による並べ替え<int、Tuple <int、int、int、int、string、int >>

+7

あなたは全く '辞書<,>'並べ替えることはできません。要素をシーケンスとして特定の方法で並べ替えることはできますが、それはもはや辞書ではありません。 –

+1

ソートされた辞書が必要なものであれば、['OrderedDictionary'](https://msdn.microsoft.com/en-us/library/system.collections.specialized)の使用を検討してください。順序付けられた辞書(v = vs.110).aspx)。 –

+4

@IanH: 'int'キーで' Dictionary'を持つのはまったく合理的です...なぜそうでないと思いますか? –

答えて

2

辞書をソートすることはできません。辞書をソートすることはできません。ソートは辞書の目的を破るので、意味がありません。ソートはハッシュテーブルを分割します。

あなたはこのように、辞書からアイテムを取得し、それらを並べ替えることができます。

ご覧のとおり
List<KeyValuePair<int, Tuple<int, string, int, bool>> list; 
list = dict.OrderBy(kvp => kvp.Value.Item3).ToList(); 

は、最終的な結果はリストではなく、辞書です。

+1

これは良いようですが、そうではありません:List >> list; temp.OrderBy(kvp => kvp.Value.Item3).ToList() ; '' ?? – Platus

+0

ああ、タイプミス。ありがとう@Kikus –

0

リストには変換または配列とインプレースソートすることによって、余分なメモリ割り当ての一部を回避することができます

var arr = dic.ToArray(); 
Array.Sort(arr, (a, b) => a.Value.Item3.CompareTo(b.Value.Item3)); 
+0

あなたは 'OrderBy'と' Array.Sort'を意味しますか? –

+0

@JeroenvanLangenはい、ポイントは、 '.OrderBy' LINQ拡張が、' ICollection '(' .Count')を実装しない 'IOrderedEnumerable 'コレクションを返すため、 '.ToList'または' .ToArray'は複数のメモリ割り当てを行う – Slai

関連する問題