// removing duplicities from Dictionary
var removables = data.ToLookup(x => x.Value, x => x.Key)
.SelectMany(x => x.Skip(1)).ToList();
foreach (var key in removables)
data.Remove(key);
这段代码在下面的输入(数据)下效果很好:
102030;"http://xxx.yyy.com/102030.ashx"
102030;"http://xxx.yyy.com/102030_x.ashx"
102030;"http://xxx.yyy.com/102030_x.ashx"
被删除。但是当我输入以下内容时:
102030;"http://xxx.yyy.com/102030_x.ashx"
102030;"http://xxx.yyy.com/102030.ashx"
102030;"http://xxx.yyy.com/102030.ashx"
被删除。但是我只需要删除包含“ _”的项目。
如何解决这个问题呢 ?是否可以按长度对输入进行排序或调整linq查询?
最佳答案
如果要跳过带下划线的元素,则不应跳过第一个元素,而保留所有不带下划线的元素:
// smart removing duplicities from Dictionary
var removables = data.ToLookup(x => x.Value, x => x.Key)
.SelectMany(x => x.Where(y => !y.Key.Contains('_')).ToList();
foreach (var key in removables)
data.Remove(key);