我有两个包含一些值的列表。我想创建新列表并添加两个都不同的两个列表中的所有值。
我是LINQ的新手,还没有经验。所以我以这种方式做到了,但这不是我想要的。
如果两个列表中都存在该值,则新列表仅包含不同的值,然后该值将仅在新列表中出现一次。
我通过使用Distinct Extension方法实现了它,但这不是我想要的...我希望新列表仅包含Distinct值。
代码:
namespace ConsoleApp2
{
class Program
{
static void Main(string[] args)
{
List<string> firstList_names = new List<string>()
{
"Rehan",
"Hamza",
"Adil",
"Arif",
"Hamid",
"Hadeed"
};
List<string> secondList_names = new List<string>()
{
"Mahboob",
"Zeeshan",
"Rizwan",
"Hamid",
"Rehan",
"Hamza"
};
List<string> result = new List<string>();
foreach (var nameOfFirstList in firstList_names)
result.Add(nameOfFirstList);
foreach (var namesOfSecondList in secondList_names)
result.Add(namesOfSecondList);
Console.Write(result.Distinct().Count());
}
}
}
答案 0 :(得分:2)
遵循此示例(摘自https://docs.microsoft.com/en-us/dotnet/api/system.linq.enumerable.union?view=netframework-4.7.2)
int[] ints1 = { 5, 3, 9, 7, 5, 9, 3, 7 };
int[] ints2 = { 8, 3, 6, 4, 4, 9, 1, 0 };
IEnumerable<int> union = ints1.Union(ints2);
foreach (int num in union)
{
Console.Write("{0} ", num);
}
/*
This code produces the following output:
5 3 9 7 8 6 4 1 0
*/
答案 1 :(得分:1)
为了只获取两个列表共有的项目,可以使用System.Linq
扩展方法Enumerable.Intersect
,该方法返回两个列表的 intersection :
var intersection = firstList_names.Intersect(secondList_names);
但是,您的问题有些混乱。如果要同时从两个列表中选择所有项目(没有重复项),则可以使用Union
扩展方法:
var union = firstList_names.Union(secondList_names);
如果您想以“老式”方式(不使用扩展方法)进行操作,则可以执行以下示例。
对于路口:
var intersection = new List<string>();
foreach(var item in firstList_names)
{
if (secondList_names.Contains(item) && !intersection.Contains(item))
{
intersection.Add(item);
}
}
联盟:
// Start with a list of the distinct firstList_names
var union = new List<string>();
foreach(var item in firstList_names)
{
if (!union.Contains(item))
{
union.Add(item);
}
}
// Add any items from the secondList_names that don't exist
foreach (var item in secondList_names)
{
if (!union.Contains(item))
{
union.Add(item);
}
}