Jas*_*son 39 c# linq arrays merge distinct
我正在使用.NET 3.5.我有两个字符串数组,可以共享一个或多个值:
string[] list1 = new string[] { "apple", "orange", "banana" };
string[] list2 = new string[] { "banana", "pear", "grape" };
Run Code Online (Sandbox Code Playgroud)
我想要一种方法将它们合并到一个没有重复值的数组中:
{ "apple", "orange", "banana", "pear", "grape" }
Run Code Online (Sandbox Code Playgroud)
我可以用LINQ做到这一点:
string[] result = list1.Concat(list2).Distinct().ToArray();
Run Code Online (Sandbox Code Playgroud)
但我想这对大型阵列来说效率不高.
有没有更好的办法?
Won*_*nko 95
string[] result = list1.Union(list2).ToArray();
Run Code Online (Sandbox Code Playgroud)
来自msdn:"此方法从返回集中排除重复.这是Concat(TSource)方法的不同行为,它返回输入序列中的所有元素,包括重复项."
Jon*_*eet 12
为什么你会想到效率低下?据我所知,Concat和Distinct都被懒惰地评估,在幕后使用HashSet为Distinct跟踪已经返回的元素.
我不确定你是如何设法让它比一般方式更高效:)
编辑:Distinct实际上使用Set(内部类)而不是HashSet,但要点仍然是正确的.这是LINQ多么简洁的一个很好的例子.最简单的答案与没有更多领域知识的情况一样有效.
效果相当于:
public static IEnumerable<T> DistinctConcat<T>(IEnumerable<T> first, IEnumerable<T> second)
{
HashSet<T> returned = new HashSet<T>();
foreach (T element in first)
{
if (returned.Add(element))
{
yield return element;
}
}
foreach (T element in second)
{
if (returned.Add(element))
{
yield return element;
}
}
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
43585 次 |
最近记录: |