C# 使用Linq联合列表
这不是一个很复杂的问题,但我不能用linq来解决它 我有一个C# 使用Linq联合列表,c#,linq,C#,Linq,这不是一个很复杂的问题,但我不能用linq来解决它 我有一个可枚举的包含一个可枚举的: 公共类 { List ListOfLists=新列表(); } 我基本上希望从列表中返回每个唯一的字符串;使用foreach循环和存储变量很容易(我可能会提高在最后不使用distinct的效率,但这不是重点): 列表结果=新列表(); foreach(列表中的var v) { foreach(v中的var s) { 结果。添加(s); } } result.Distinct(); 如何使用linq执行此操
可枚举的
包含一个可枚举的
:
公共类
{
List ListOfLists=新列表();
}
我基本上希望从列表中返回每个唯一的字符串;使用foreach循环和存储变量很容易(我可能会提高在最后不使用distinct的效率,但这不是重点):
列表结果=新列表();
foreach(列表中的var v)
{
foreach(v中的var s)
{
结果。添加(s);
}
}
result.Distinct();
如何使用linq执行此操作?使用
SelectMany
。看
编辑:要获得更好的性能,请使用:
var result = ListOfLists.SelectMany(v => v).Distinct();
或
为了完整起见,查询表达式语法有时比正确调用
SelectMany
更容易(我发现)。这就是:
result = (from list in ListOfLists
from s in list
select s).Distinct().ToList();
不需要中间的收费表,如果您确实需要收费表,请在不同的时间之后而不是之前进行。在本例中,Distinct现在返回的IEnumerable可能不是您想要的。此外,在整个列表中列出结果,然后将结果限制为Distinct,而不是先执行Distinct,这对内存/性能有很大的影响。@Jim Wooley-很好的建议。谢谢你和RichK的反馈。我们已经学会了。非常感谢!!!-我使用Linq-var result=ListOfLists.SelectMany(v=>v.Where(m=>ListOfLists.TrueForAll(n=>n.Contains(m))).Distinct().ToList()使列表“相交”;你已经有答案了。我建议尝试一下这个问题的扩展方法!您的扩展方法以优化的方式执行SelectMany和Distinct。
var distinctStrings = ListOfLists.SelectMany(list => list).Distinct();
var result = ListOfLists.SelectMany(v => v).ToList().Distinct();
var result = ListOfLists.SelectMany(v => v).Distinct();
var result = ListOfLists.SelectMany(v => v).Distinct().ToList();
result = (from list in ListOfLists
from s in list
select s).Distinct().ToList();