我们说我有一个2D阵列。沿着第一个轴,我有一系列属性可用于单个测量。沿着第二轴我有一系列测量。
因此,例如,数组看起来像这样:
personA personB personC
height 1.8 1.75 2.0
weight 60.5 82.0 91.3
age 23.1 65.8 48.5
或类似的东西。
我想经常更改数组的大小 - 例如,忽略personB
的数据,包括personD
和personE
。我将循环播放"时间",可能是> 10 ^ 5时间步长。每个时间步,每个人都有机会"数组中的数据可能会被删除,并且有可能会将几个新人引入模拟中。
从我所看到的有几种方法来管理这样的数组:
我可以使用一个带有额外列的非常大的数组,其中我放了一个" skip"旗。因此,如果我决定不再需要personB
,我会将标记设置为1
并在每次循环查看人员列表时忽略personB
。当我需要添加personD
时,我会在列表中搜索skip == 1
的第一个人,将数据替换为personD
的数据,然后设置skip = 0
。如果没有skip == 1
的任何人,我会复制该数组,取消分配该数组,再将其与多个列重新分配,然后使用personD
数据填充第一个新列。
优点:
缺点:
每次我想添加或删除一些数据时,我都会复制并重新分配整个数组。
优点:
缺点:
我重构所有内容,以便每个人的数据都包含指向下一个人数据的指针。然后,当我需要删除一个人时,我只需将其从指针链中删除并释放它,当我需要添加一个人时,我只需添加一些指向链末尾的指针。
优点:
缺点:
data(height,:)
切片,例如我不确定此选项与其他两个选项相比的效果如何。
-
那么,问题是:还有其他选择吗?我什么时候应该使用这些选项?在我的情况下,其中一个选项比其他选项更好吗?