C# 我想用另一个列表搜索字符串项列表。可能吗?
贮藏C# 我想用另一个列表搜索字符串项列表。可能吗?,c#,list,search,C#,List,Search,贮藏 在一个列表中找到项 在其他列表中找不到项。 我这样做得到了第一部分 for(int i = 0; i < list1.Count; i++) { for (int j = 0; j < list2.Count; j++) { if (list1[i] == list2[j])) { list3.Add(list1[i]);
for(int i = 0; i < list1.Count; i++)
{
for (int j = 0; j < list2.Count; j++)
{
if (list1[i] == list2[j]))
{
list3.Add(list1[i]);
continue;
}
}
}
for(int i=0;i
var list3 = list1.Where(x => list2.Any(y => x == y));
var list4 = list1.Except(list3);
如果需要列表,上述代码将为您提供IEnumerable,只需在分号(;
)之前添加.Tolist()
)
如果您需要列表4中包含列表1和列表2中不常见的项目,那么
var list3 = list1.Where(x => list2.Any(y => x == y));
var list4 = list1.Except(list3).Concat(list2.Except(list3));
更多阅读的脚注:
您可以使用Linq的
Intersect()
和Except()
来执行以下操作:
var data = new List<string>{"A", "B", "C", "D", "E", "F", "G", "H", "I"};
var targets = new List<string>{"C", "D", "E", "F"};
var found = data.Intersect(targets).ToList();
var notFound = data.Except (targets).ToList();
Console.WriteLine("Found: " + string.Join(", ", found));
Console.WriteLine("Not found: " + string.Join(", ", notFound));
var data=新列表{“A”、“B”、“C”、“D”、“E”、“F”、“G”、“H”、“I”};
var目标=新列表{“C”、“D”、“E”、“F”};
var found=data.Intersect(targets.ToList();
var notFound=data.Except(targets.ToList();
WriteLine(“找到:”+string.Join(“,”,找到));
WriteLine(“未找到:”+string.Join(“,”,未找到));
在我看来,当您在学习和/或研究循环时,我看到其他答案使用LINQ(这是目前为止最好的方法)。因此,如果您更愿意像处理“已找到”列表那样遵循“基本”方法,您可以尝试以下处理“未找到”列表的方法:
for(int i=0;i
如果你的目的不是像我假设的那样简单地学习语言和语法,那么请选择使用LINQ的其他答案,因为它们更专业。这是否回答了你的问题@MathewHD我想他的问题是获取列表中不存在的项目顺便说一下。。。您可以在“已找到”列表的解决方案中删除continue语句。在它所在的位置,它对您没有任何作用,因为在调用list3.Add()之后,它无论如何都会在内部for循环上“继续”。+1用于简化where条件,而不是bool值可以简化为
if(list1[i]==list2[j])list3.Add(list1[i]);else list4.Add(list1[i])代码>@Lucifer,这不起作用。每次list1中的元素与list2中的元素不匹配时,您都会将该list1元素添加到list4中。您最终会将列表1的所有元素都放入列表4中。更糟糕的是,事实上,因为其中很多都会重复几次。
for (int i = 0; i < list1.Count; i++)
{
bool add = true;
for (int j = 0; j < list2.Count; j++)
{
if (list1[i] == list2[j])
{
add = false;
break;
}
}
if (add == true)
{
list4.Add(list1[i]);
}
}