假设有两个数组:
String[] title = { "One","Two","three","Four"};
String[] user = { "rob","","john",""};
当 user
值为 Empty 时,我需要过滤掉上面的数组,然后将两者连接或压缩在一起。最终输出应该是这样的:
{ "One:rob", "three:john" }
这如何使用 LINQ 完成?
最佳答案
首先,您需要一个 Zip
运算符将两个数组压缩在一起。这是来自 Eric Lippert's blog 的代码的缩写版本(此版本中没有错误检查,只是为了简洁):
public static IEnumerable<TResult> Zip<TFirst, TSecond, TResult>
(this IEnumerable<TFirst> first,
IEnumerable<TSecond> second,
Func<TFirst, TSecond, TResult> resultSelector)
{
using (IEnumerator<TFirst> e1 = first.GetEnumerator())
using (IEnumerator<TSecond> e2 = second.GetEnumerator())
while (e1.MoveNext() && e2.MoveNext())
yield return resultSelector(e1.Current, e2.Current);
}
请注意,Zip
将包含在 .NET 4.0 的标准库中。
然后你只需要应用一个过滤器和一个投影。所以我们会得到:
var results = title.Zip(user, (Title, User) => new { Title, User })
.Where(x => x.Title != "")
.Select(x => x.Title + ":" + x.User);
关于c# - 字符串数组中的 LINQ "zip",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1176653/