2016-09-13 150 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(); 

我怎麼能這樣做?

+1

您能否顯示樣本輸入和預期輸出? –

回答

1

ToDictionary需要兩個參數 - 一個用於鍵選擇器和一個價值選擇,所以你可以這樣做:

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

@D赤柱謝謝!這似乎是我需要的。但不幸的是,我無法將其轉換回原始類型。 – Andeverien

+0

@Andeverien我添加了一個對'ToList'的調用,將它重新轉換成一個'ICollection'。 –

+0

「System.Collections.Generic.Dictionary >>」could not cast to 「System.Collections.Generic.IDictionary >>「。 – Andeverien

0

你可以考慮使用OrderedDictionary(TKey, TValue)。使用自定義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('_')); 
    } 
} 

很顯然,我不會建議做在每個呼叫的字符串操作,但至少應該表現出的基本思想。這將確保您的物品以這種方式添加,所以它應該稍後保存一些處理:)

相關問題