基本上我有一个如下对象:
IDictionary<string, ICollection<KeyValuePair<string, int>>> myDict;
我想做的是按密钥对其内部集合进行排序,而不使用下划线前缀。
我这样做是愚蠢的:
myDict = myDict.Select(x => x.Value.OrderBy(v => v.Key.Remove(0, v.Key.IndexOf('_')))).ToDictionary();
我怎么能这样做?
答案 0 :(得分:1)
ToDictionary
需要两个参数 - 一个用于键选择器,另一个用于值选择器,因此您可以执行以下操作:
myDict = myDict.ToDictionary(
kvp => kvp.Key,
kvp => ICollection<KeyValuePair<string, 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('_'));
}
}
显然我不建议在每次调用时进行字符串操作,但这至少应该证明基本思路。这将确保您的商品以这种方式添加,以便以后保存一些处理:)