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

Mat*_*ern 5 c# list

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

假设我有一个主Item对象列表,并且Item有两个属性,比如说WeightValue.

该程序将经常被要求排序Weight并获得最轻的,Item而在其他地方它被分类Value并获得最昂贵的Item.

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

Mar*_*ell 7

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