元组<list <int>,List <int>&gt;或列表<tuple <int,int =“”>&gt;?</tuple <int,> </int> </list <int>

时间:2010-12-03 20:38:16

标签: c# tuples

哪种操作更受欢迎和/或更有效?

我最终使用了一个元组列表,但我很好奇哪个是首选。

意见欢迎,但我希望通过谷歌找不到技术方面。

5 个答案:

答案 0 :(得分:4)

这取决于数据的含义。

如果它是两个数字列表,那么列表元组就是正确的。如果它是一个数字对列表,那么元组列表就是正确的。

无论整数是什么意思,这些列表的长度是否合适?如果是这样,那么你可能有两个独立的列表,一个列表元组是正确的。

如果整数只有列表长度相等才有意义,那么你可能有一个数字对列表,所以元组列表是正确的。

答案 1 :(得分:4)

两个列表的元组每个项目包含2个引用类型/指针(每个列表1个),2元组列表只涉及一个(每个元组1个),所以你节省了8个?每个项目的字节数(忘记指针+ .net metainfo有多大)。

这样的微优化是否有意义?我对此表示怀疑。我宁愿建议从业务逻辑角度使用最有意义的东西。

答案 2 :(得分:4)

这些选项具有完全不同的语义。

一个意味着两个列表只有彼此之间的连接,并且列表A中位置x中的元素与列表B中的相同位置不对应。以下内容完全有效:

{ [1, 2, 3, 4, 5, 6], [7] }

另一个是配对元素列表。如果你想把两个数字联系在一起,一组来自A组,一组来自B组,我怀疑你想要一个List<Tuple<int, int>>。在这种情况下,上面的示例将无效,并且当您想要使用列表时,您可能会为自己省去很多麻烦。

与往常一样,考虑您要模拟的内容并确定最适合的数据结构。对于可忽略的性能改进而言,不值得牺牲语义完整性(至少,使用语义正确的版本构建它并在性能问题出现时进行破解)。我不确定这里是否有性能问题,但如果有的话,第二个选项会导致内存占用更少(因为你分配的列表更少)

答案 3 :(得分:3)

他们是两个不同的东西。第一个是如果你想要一个元组,它包含两个没有真正关联的整数列表,但这两个列表在某种程度上是整体相关的。第二个是具有两个整数的元组列表,因此整数A以某种方式链接到元组中的整数B.

盲目地猜测,你可能想要选项B.这意味着每个元组都有两个以某种方式链接的整数。我可能是错的,但在这两个选项中,这是大多数人想要的。它有点像关键值对。

答案 4 :(得分:2)

这取决于你想要达到的目标。我想您希望拥有多对int,然后List<Tuple<int, int>>就是解决方案。可能有些情况下其他人都很有用,但我无法想到任何其他问题。