【问题标题】:Enumerable.Zip more than 2 collections?Enumerable.Zip 超过 2 个集合?
【发布时间】:2016-04-10 20:21:52
【问题描述】:
 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 像这样打印出来:

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

有没有一种简单的方法可以使用不同的方法将三个或更多变量添加到一起压缩?

例如

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

提前致谢!

【问题讨论】:

  • 您可以链接Zip 命令 - 1123、1124 和 1125 来自哪里?
  • @RegEdit 这两个问题的期望结果是不同的,所以我不确定它应该是重复的......另一方面,答案可以适应回答这个问题......所以保持我的口袋里的金锤而不是关闭。

标签: c# collections html-agility-pack enumerable


【解决方案1】:

没有。

您可以链接 Zip 调用,或者您可以编写(或查找)扩展/帮助方法,类似于 Zip 并行遍历多个源以提供您正在寻找的功能。

在您的特定情况下,请考虑迭代一些父节点并选择相对于父节点的单个子节点(假设特定项目的所有节点都是单个“父”节点的子节点)。

【讨论】:

    【解决方案2】:

    我认为你不能用 .Zip 轻松做到这一点(禁止多个级别的 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] });
    

    【讨论】:

    • 关于使用索引合并(对于相同长度的序列)的能力的好点。请注意,索引建议适用于数组/列表,但对于 Xml/Html 节点列表,每次访问索引可能是 O(n) 而不是 O(1),从而使整体代码 O(n^2) 而不是O(n)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-12
    相关资源
    最近更新 更多