2016-09-13 12 views
0

次のように基本的に私は、オブジェクトを持っている:私がやりたいネストされたコレクションをオブジェクトで変更したコレクションをソートする方法

IDictionary<string, ICollection<KeyValuePair<string, int>>> myDict; 

何が彼らが持っているアンダースコアの接頭辞なしのキーで、その内のコレクションを並べ替えることです。そうすることで

私attemtはfoollowsです:

myDict = myDict.Select(x => x.Value.OrderBy(v => v.Key.Remove(0, v.Key.IndexOf('_')))).ToDictionary(); 

はどうすればこれを行うことができますか?あなたはOrderedDictionary(TKey, TValue)を使用して検討することもでき

myDict = myDict.ToDictionary(
      kvp => kvp.Key, 
      kvp => ICollection<KeyValuePair<s‌​tring, int>> 
         kvp.Value.OrderBy(v => v.Key.Remove(0, v.Key.IndexOf('_'))) 
          .ToList() 
      ); 
+1

サンプル入力と期待される出力を表示できますか? –

答えて

1

ToDictionaryは、2つのパラメータが必要です。カスタムIComparer(T)を使用すると、好きなように注文することができます。このような

何か:明らか

public class MyComparer : IComparer<string> 
{ 
    public int Compare(string first, string second) 
    { 
     return first.Remove(0, first.IndexOf('_')) 
      .CompareTo(second.Remove(0, second.IndexOf('_')); 
    } 
} 

私は呼び出しごとに文字列操作を行うことをお勧めしませんが、これは、少なくとも基本的な考え方を示すべき。これにより、に追加され、後で処理が保存されるようになります。

+0

@D Stanleyありがとう!これは私が必要としているようだ。しかし残念ながら、元のタイプに戻すことはできません。 – Andeverien

+0

@Andeverien私は 'ToList'を呼び出してそれを' ICollection'に戻しました。 –

+0

"System.Collections.Generic.Dictionary >>" にキャストできません "System.Collections.Generic.IDictionary >> "。 – Andeverien

0

:あなたのような何かができるので、キーセレクタの1と値選択のための1 -

関連する問題