2016-01-06 55 views
-1
var productNameTags = document.DocumentNode.SelectNodes(textBox3.Text); 
       var priceTags = document.DocumentNode.SelectNodes(textBox2.Text); 
       var codeNameAndPrice = productNameTags.Zip(priceTags, (n, w) => new { productNameTags = n, priceTags = w }); 
       int counter = 1; 
       if (codeNameAndPrice != null) 
       { 
        foreach (var nw in codeNameAndPrice) 
        { 
         label1.Visible = true; 
         label1.Text += counter + ". " + nw.productNameTags.InnerHtml + " - " + nw.priceTags.InnerHtml + "\n"; 
        } 
       } 

我有这样的代码看起来在HTML标签和打印出产品名称,并从网站上的价格,并打印出像这样使用.ZIP:Enumerable.Zip多于2个集合?

  1. 棒球 - £5.00
  2. 足球 - £10.00
  3. 玩具车 - £15.00

是否有使用不同的方法将三个或更多的变量来压缩在一起的一个简单的方法?

例如

  1. 棒球 - £5.00 - 1123
  2. 足球 - £10.00 - 1124
  3. 玩具车 - £15.00 - 1125

提前感谢!

+0

你可以连'Zip'命令 - 哪里来的1123,1124,和1125从何而来? –

+0

[邮编ÑIEnumerable的的可能的复制š一起?同时在它们之间迭代?(http://stackoverflow.com/questions/3989319/zip-n-ienumerablets-together-iterate-over-them-simultaneously) –

+0

这两个问题@RegEdit期望的结果是不同的,所以我我不知道它应该是重复的......另一方面,答案可以用来回答这个问题......所以把我的金锤放在口袋里而不是关闭。上使用索引合并(对于相同长度的序列)的能力 –

回答

1

我不认为你可以.ZIP(拉链的巴多层次?)很容易做到,但你可以动态地做到这一点:

var names = new[] { "Baseball", "Football", "Toy Car" }; 
var prices = new[] { 5.0M, 10.0M, 15.0M }; 
var ids = new[] { 1123, 1124, 1125 }; 
var products = names 
    .Select((name, index) => new { Name = name, Price = prices[index], Id = ids[index] }); 
+1

好一点。注意索引建议正常工作与阵列/列表,但是对于XML/HTML节点列出它可能会为O(n),而不是O(1)每次访问,从而所述索引使得总代码为O(n^2),而不是上)。 –

0

你可以链邮编调用,或者您可以编写(或查找)与Zip类似地并行执行多个源的扩展/帮助器方法,以提供您正在寻找的功能。

你的具体情况考虑遍历一些父节点和选择单个子节点相对于父(假设特定项目是单一的“父”节点的所有子节点)。