内存使用两次存储相同的列表,按不同的标准排序?

时间:2013-08-22 10:54:54

标签: c# list

这是一个理论上的例子,但希望它突出了我的问题:

假设我有一个Item个对象的主列表,Item有两个属性,比如WeightValue

该程序经常需要按Weight排序并获得最轻的Item,而在其他地方按Value排序并获得最贵Item

主列表有可能非常大,因此一遍又一遍地对主列表进行排序将是很多不合理的工作。为了节省时间,可以将排序后的结果存储为自己的列表吗?这些其他列表是否只存储指向真实对象的指针,而不仅仅是再次存储它们?

3 个答案:

答案 0 :(得分:7)

这取决于Itemstruct还是class。如果它是class(因为它是明智的默认值),那么 两个 列表只包含对象的引用 - 不会重复所有对象Weight / Value值。如果它是struct,则所有值重复,因为每个值都有一个单独的支持向量,实际的结构将在向量中。附注:如果值为 strings ,则请注意字符串也是引用类型,因此字符串内容不会重复(除非它们是分开创建的,没有任何伪实习等。)

答案 1 :(得分:3)

  

这些其他列表是否只存储指针对真实对象的引用,而不仅仅是再次存储它们?

只要Item是一个类而不是结构:是。

答案 2 :(得分:0)

因为我们可以阅读here类是引用类型,这意味着它们不会被复制到新列表

你确实可以保留两个列表并按price排序,另一个按Weight排序,这样可以让您的生活更轻松