Aya*_*hby 5 c# list distinct addrange
我有一个List的List的Strings,我需要使用AddRange()功能项的设置添加到它,但从来没有重复项目.
我使用了以下代码:
List<List<string>> eList = new List<List<string>>();
List<List<string>> mergedList = new List<List<string>>();
//
// some code here
//
mergedList.AddRange(eList.Where(x => !mergedList.Contains(x)).ToList());
Run Code Online (Sandbox Code Playgroud)
但它不起作用.
所有重复的项目都已添加,所以我该如何解决?
一个)
如果你的意思是重复是两个列表包含相同顺序的相同元素,那么
List<List<string>> eList = new List<List<string>>();
eList.Add(new List<string>() { "a", "b" });
eList.Add(new List<string>() { "a", "c" });
eList.Add(new List<string>() { "a", "b" });
var mergedList = eList.Distinct(new ListComparer()).ToList();
Run Code Online (Sandbox Code Playgroud)
public class ListComparer : IEqualityComparer<List<string>>
{
public bool Equals(List<string> x, List<string> y)
{
return x.SequenceEqual(y);
}
public int GetHashCode(List<string> obj)
{
return obj.Take(5).Aggregate(23,(sum,s)=> sum ^= s.GetHashCode());
}
}
Run Code Online (Sandbox Code Playgroud)
B)
如果列表中元素的顺序不重要,那么
List<List<string>> eList = new List<List<string>>();
eList.Add(new List<string>() { "a", "b" }); <--
eList.Add(new List<string>() { "a", "c" });
eList.Add(new List<string>() { "b", "a" }); <--
var mergedList = eList.Select(x => new HashSet<string>(x))
.Distinct(HashSet<string>.CreateSetComparer()).ToList();
Run Code Online (Sandbox Code Playgroud)