2012-03-09 1 views
3

ListDictionary<string, string> dictです。Listをアルファベット順にdict["Title"]の値から並べ替える必要があります。C#.NET Silverlightのディクショナリ内のキーの値に基づいてディクショナリのリストをソートするにはどうすればよいですか?

どうすればいいですか?

そして、私は(実際にdict["Title"]を変更せずに)、dict["Title"]の値をとるstring title = dict["Title"] + "xyz";のように変更し、そのdictのソート値として変更titleを使用したい場合はどのような...

どうだろう私もそれについてやっていますか?

ありがとうございました。

+0

、あなただけの1 "タイトル" 各辞書のキーを持つことができます。実際に何をしようとしていますか? –

+0

「タイトル」キーを1つ並べます。 –

答えて

6

LINQのそれは:私が知っているように

var dicts = new List<Dictionary<string, string>>(); 

var sort = dicts.OrderBy(x => x.ContainsKey("Title") ? x["Title"] : string.Empty); 
var sort2 = dicts.OrderBy(x => x.ContainsKey("Title") ? x["Title"] + "xyz" : string.Empty); 
-1

ここで解決策はLINQです。

dictionary.OrderBy(o => o.Key) 
dictionary.OrderByDescending(o => o.Key) 

そして、修正版

dictionary.OrderBy(o => o.Key + "xyz") 
dictionary.OrderByDescending(o => o.Key + "xyz") 
+0

これは、 'List <>' –

+0

ではなく 'Dictionary <>'を並べ替えます。 – Dharun

4

のためにそれはあなたがこのような何かを言おうとしているように思える:

List<Dictionary<string, string>> list; 

そして、何あなたがやりたいことは

のようなものです
list.Sort(); 

ただし、 。 だから、何あなたが代わりに行うことができますすることはDictionary<string, string>のためのラッパークラスを作成してから比較方法をオーバーロードのいずれかである、またはあなたが

static int CompareDicts(Dictionary<string, string> x, Dictionary<string, string> y) { 
    return String.Compare(x["Title"],y["Title"]); 
} 

または

static int CompareDicts(Dictionary<string, string> x, Dictionary<string, string> y) { 
    return String.Compare(x["Title"]+"xyz",y["Title"]+"xyz"); 
} 

そしてソートするような比較方法を作ることができます

list.Sort(CompareDicts); 

編集:リストのソート機能の束について、http://msdn.microsoft.com/en-us/library/3da4abas.aspx

をチェックしてください
+0

デリゲートを使用すると便利: list.Sort((x、y)=> {return String.Compare(x ["Title"]、y ["Title"]);}); –

0
var dicts = new List<Dictionary<string, string>>(); 

// populate dictionaries. 

var sorted = dicts.OrderBy(x => x.ContainsKey("Title") ? x["Title"] : string.Empty)); 
+0

彼の2番目の変更されたタイトル:var sort2 = dicts.OrderBy(x => x.ContainsKey( "Title")?x ["Title"] + "xyz":string.Empty); – Beyers