比较多个列表并使用c#/ Html输出比较表

时间:2014-12-23 16:36:28

标签: c# html

我想比较一些列表(最多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; }

}

所以现在我有一个传递给View的'Compare'模型,比如3 Tree,每个都包含一些项目。

我想问的是,我如何编写一个模型视图,比较哪个项目存在于哪个树中,而哪个项目不存在于哪个列表中,使用true和false表示哪个列表。

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次。有更快的方法吗?非常感谢!

1 个答案:

答案 0 :(得分:0)

您将不必担心性能与您将拥有的树/项目一样少。如果你有10棵树,每个有90个项目,那么就会有900个调用contains,它必须遍历树中的每个项目(90个项目),在你的代码中进行总共81K的比较。你的机器是以GHz的速度测量的,所以运行它应该花费你不会注意到的一小部分时间。该算法的big-O表示法是O(m * n ^ 2),其中m是树的数量,n是树的大小。这对于小m和n(你相对来说)来说并不算太糟糕。

如果这是一个网站,速度确实成为一个问题,你可以采取一些方法,但是看看缓存这个输出可能更容易/更好,而不是让计算更快。

如果您确实需要加快速度,那么您可以做些事情。一个潜在的优化方法是,而不是在UnionedItemList上调用.Contains,在t上调用UnionedItemList,使t.items成为哈希表(字典),然后迭代UnionedItemList设置相应的{{1}}中的值。从理论上讲,这只是O(m * n),在你的情况下仅调用900次比较,但缺点是增加了复杂性,并且在这种规模下,使用哈希表的开销可能比你的方式更糟糕。这样做。