我有一个用户列表:
List<UserEntry> list1 = new List<UserEntry>();
list1.Add(new UserEntry { login = "1", requestorList = new List<string>() { "1", "2", "3" } });
list1.Add(new UserEntry { login = "2", requestorList = new List<string>() { "1", "4", "3" } });
list1.Add(new UserEntry { login = "3", requestorList = new List<string>() { "1", "2", "3" } });
我想找到具有相同requestorList的元素并将它们分组在第二个List中。在上面的示例中,第一个和第三个元素具有1,2,3。
我尝试了这个,但它不起作用:
for (int i = 0; i < list1.Count; i++)
{
var kar = list1.ElementAt(i);
for (int j = 0; j < list1.Count; j++)
{
if(kar.requestorList.Equals(list1.ElementAt(j).requestorList))
{
list2.Add(kar);
}
}
}
编辑:第二个列表应该只有2个元素,因为第一个和第三个具有相同的requestorLists
如果要获取所需的列表,请执行以下操作:
首先,您需要添加第二个条件,例如:
if(list1.ElementAt(i).Equals(list1.ElementAt(j))){
continue;
}
为了跳过将元素与其自身进行比较的情况。
另外,如果您不希望重复,请使用此方法,而不是仅执行以下操作list2.Add(kar);
:
if(!list2.Contains(kar)){
list2.Add(kar);
}
编辑:完整的代码应该看起来像这样,如果我不搞砸的话:
for (int i = 0; i < list1.Count; i++)
{
var kar = list1.ElementAt(i);
for (int j = 0; j < list1.Count; j++)
{
if(kar.requestorList.SequenceEqual(list1.ElementAt(j).requestorList))
{
if(list1.ElementAt(i).Equals(list1.ElementAt(j))){
continue;
}
if(!list2.Contains(kar)){
list2.Add(kar);
}
}
}
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句