将列表项组合在一起以形成第三个列表(即list1; 1,2,3。list2; a,b,c.list3; 1a,2b,3c。)

时间:2017-09-16 19:45:53

标签: c#

那里。

我有两个XmlNode列表。我想将它们组合成第三个列表,或者理想地直接组合到一个复选框列表中,其中每个项目通过它们的索引与另一个列表的项目相对应,产生一个组合项目的输出,即list1; 1,2,3。list2; a,b,c。项目list3; 1a,2b,3c。

“1,2,3,a,b,c。”

我所使用的代码使用了两个foreach循环,但输出了所有可能的组合,我知道为什么,我似乎无法找到正确的代码,所以这只是我所在的一个例子。

            var lsMac = xnList.Cast<XmlNode>().Select(node => node.InnerText);
            var lsDisp = xnList1.Cast<XmlNode>().Select(node => node.InnerText);
            foreach (var m in lsMac)
            {
                foreach (var d in lsDisp)
                {
                    chkboxMAC.Items.Add(m + " " + d);
                }
            }

也许Join会是一个很好用的方法吗?

谢谢!

3 个答案:

答案 0 :(得分:1)

您可以使用Linq的Zip。

var lsMac = xnList.Cast<XmlNode>().Select(node => node.InnerText);
var lsDisp = xnList1.Cast<XmlNode>().Select(node => node.InnerText);
var result = lsMac.Zip(lsDisp, (m, d) => m + " " + d);
foreach(var x in result) chkboxMAC.Items.Add(x);

Zip将枚举两个枚举。

答案 1 :(得分:1)

您应该为此目的使用LINQ.ZIP

这里是小提琴https://dotnetfiddle.net/5uCqZm

的内容
  var foo= new List<int> {1, 2, 3};
    var bar= new List<string> {"a", "b", "c"};

     var result = foo.Zip(bar, (a, b) => {
        return a.ToString() + b;
    });

答案 2 :(得分:1)

作为Zip()在其他答案中的替代方案,您可以使用Select()

var result = lsMac.Select((item, index) => item + " " + lsDisp.ElementAt(index));

或者使用ToList()

来调用[]按索引获取元素
var lsDispList = lsDisp.ToList();
var result = lsMac.Select((item, index) => item + " " + lsDispList[index]);