在LINQ中投射脱节集

时间:2009-10-22 10:13:42

标签: c# linq

我有两个字符串数组(我不会在任何地方使用它,因为它不是一个好的逻辑,这是出于我的学习目的)。

string[] names = new[] { "Joss", "Moss", "Kepler" };

string[] emails = new[] { "Moss@gmail", "Kepler@gmail", "Joss@gmail" };

如何使用LINQ以使键值对像

{"Joss","Joss@gmail"} ,{"Moss","Moss@gmail"} , {"Kepler","Kepler@gmail"} 
  1. 电子邮件ID在字符串数组电子邮件[]
  2. 中随机播放
  3. 考虑两个字符串数组都保留唯一名称和唯一的电子邮件ID (他们的名字是电子邮件ID)。
  4. 如何使用Join来投射我想要的结果?

                              var JoinDemo = from grpname in names
                              join
                              grpmails in emails 
                              on grpname ????????
    

3 个答案:

答案 0 :(得分:1)

听起来你想要Zip operator from .NET 4.0。如果您不能等待那么久,可以使用MoreLINQ中的实现。

我不确定你对洗牌的意思...你真的想随机配对吗?如果是这样的话,最先将一个数组洗牌然后再进行拉链操作最简单。

答案 1 :(得分:1)

使用您定义的约束,这应该完成工作:

        var q = from name in names
                join email in emails on name equals email.Remove(email.IndexOf('@'))
                select new
                {
                    Name = name,
                    Email = email
                };

答案 2 :(得分:0)

这是{3.5} BCL开箱即用的Zip操作。

如果您有两个相同长度的数组(不适用于通用IEnumerable<T>),您可以使用:

var zippedArrays = Enumerable.Range(0, Math.Min(a.Length, b.Length))
                             .Select(i => new { Name = a[i], Email = b[i] })
                             .ToList();