c# - 字符串数组中的 LINQ "zip"

标签 c# linq

假设有两个数组:

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/

相关文章:

c# - 使用 Linq 对 XML 进行复杂排序

c# - Webapi 计算特定的获取请求

c# - 给定 N 个容器找到 blob

c# - 搜索 - IQueryable Linq

c# - 是否值得使用值元组作为返回值来包含成功标志?

C# Windows 窗体 - 如何根据背景颜色的深浅更改选项卡页标题文本颜色?

linq - 这个 RavenDB linq 查询是如何工作的

c# - 如何将新对象插入匿名数组?

c# - 如何按字段对列表进行排序

c# - linq to sql 中的奇怪行为在不过滤的情况下返回所有行