如何通过对象修改后的值对嵌套Collection进行排序?

时间:2016-09-13 14:31:49

标签: c# linq

基本上我有一个如下对象:

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

我想做的是按密钥对其内部集合进行排序,而不使用下划线前缀。

我这样做是愚蠢的:

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

我怎么能这样做?

2 个答案:

答案 0 :(得分: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()
            );

答案 1 :(得分: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('_'));
    }
}

显然我不建议在每次调用时进行字符串操作,但这至少应该证明基本思路。这将确保您的商品以这种方式添加,以便以后保存一些处理:)