2016-09-13 18 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('_')); 
    } 
} 

很显然,我不会建议做在每个呼叫的字符串操作,但至少应该表现出的基本思想。这将确保您的物品以这种方式添加,所以它应该稍后保存一些处理:)

相关问题