【问题标题】:Comparing a number of lists and output a comparison table using c#/Html使用c#/Html比较多个列表并输出比较表
【发布时间】:2015-02-21 20:01:03
【问题描述】:

我想比较多个列表(最多 10 个)并输出一个比较表,显示列表中存在哪些项目。

假设我有 3 个列表

A{ item1, item2, item3} B{ item2} C{ item4, item 1 }

我想要一个表格,将 A、B、C 中的所有不同项目显示为行 列表名称作为列 在网格内,我想要一个真/假,显示该项目是否存在于该列的列表中。

有没有简单的方法在 html 或 c# 中做到这一点? (我使用.net mvc) 非常感谢!

编辑:抱歉含糊其辞。我仍在考虑最好的方法。 我现在拥有的: 包含不同列表列表的模型

 public class CompareModel
{

    public List<Tree> trees{ get; set; }
    public string someotherinfo1 { get; set; }
    public string someotherinfo2{ get; set; }

}
 public class Tree
{

    public List<item> items{ get; set; }
    public int treeid{ get; set; }
    public string treename{ get; set; }

}
 public class Item
{

    public int itemid{ get; set; }
    public string itemname{ get; set; }

}

所以现在我有一个“比较”模型传递给视图,比如 3 树,每个都包含一些项目。

我想问的是如何编写模型的视图,比较哪些项目存在于哪个树中,哪些项目不存在于哪个列表中,使用真假表。

在 html 中是这样的:

       | A | B | C |
 item1 | T | F | T |
 item2 | T | T | F |
 item3 | T | F | F |
 item4 | F | F | T |

提到的列是树的项目的联合。网格内的真/假怎么样?现在我正在考虑一种直接的方法:

foreach (Tree t in trees){
    foreach (Item i in UnionedItemList){
       result = t.items.Contains(i);
       //Display result
   }
}

有更好的方法吗?因为在实际情况下,我希望每棵树有 90 个项目。如果一切都不同,我将不得不运行 .Contains() 270 次。有更快的方法吗?非常感谢!

【问题讨论】:

  • 您的具体问题是什么?您的表格中的某些数据不正确?请出示您的代码并说明预期内容和您现在拥有的内容
  • 是的,有一种简单的方法可以在 C# 中完成(当然你也可以在 HTML 中输出)。如果您发布您的代码(请参阅help center)并且您解释了哪个部分不起作用,我们可能会尝试帮助您修复它。
  • 到目前为止,您尝试了什么?另外,您从哪里获取这些数据?
  • 列表是什么格式的?你有单独的列表变量,列表列表吗?如果要获取多个列表中的所有不同项目,可以使用 LINQ (C#) 中的 Union 函数(它需要 2 个集合或列表,并告诉您所有列表中的不同值集)
  • 抱歉,我的问题不是很具体。请再次参考问题。谢谢您的帮助! @mirhagk 感谢 Union 函数的帮助!这真的很有帮助!

标签: c# html


【解决方案1】:

您不必担心您将拥有的树木/物品很少的性能。如果您有 10 棵树,每棵树有 90 个项目,则对 contains 进行 900 次调用,它必须遍历树中的每个项目(90 个项目),以便在您的代码中进行总共 81K 次比较。你的机器是以 GHz 的速度来衡量的,所以运行它应该只需要一秒钟的时间,你甚至不会注意到。该算法的大 O 表示法是 O(m*n^2),其中 m 是树的数量,n 是树的大小。这对于小的 m 和 n (相对而言)来说还不错。

如果这是针对网站,并且速度确实成为问题,您可以采取一些方法,但查看缓存此输出而不是加快计算速度可能会更容易/更好。

如果您确实需要加快速度,您可以做一些事情。一种潜在的优化是在t 上调用.Contains 而不是迭代UnionedItemList,使UnionedItemList 成为哈希表(字典)并迭代t.items,在UnionedItemList 中设置适当的值。从理论上讲,这只是 O(m*n),在您的情况下仅调用 900 次比较,但缺点是增加了复杂性,在这种规模下,使用哈希表的开销可能比按照您的方式进行操作更糟糕正在做。

【讨论】:

  • 非常感谢您的帮助!是的,我确实打算在网站上显示结果!我想我会坚持原来的方法并在输出缓存上工作!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多