我正在处理非常大的数组(数百万个数据点),并且想知道偏移数组块的最快方法。我目前正在for循环中这样做。
例如,假设我有一个类型化数组:
[5, 6, 7, 10, 1, 14, 4, 5, 1, 10, 25, 20, 21, 5, 9, 7, 7, 3, 4]
我必须把这个数组作为我的“原始”保存在记忆中
现在我想将索引5中的块移到索引8(这将是[14, 4, 5]
),
所以我应该留下:
[5, 6, 7, 10, 1, 1, 10, 25, 20, 21, 5, 9, 7, 7, 3, 4]
然后我想将结果索引3中的块移到索引5(这将是([10, 1]
)
所以我应该留下:
[5, 6, 7, 1, 10, 25, 20, 21, 5, 9, 7, 7, 3, 4]
对于每个编辑,我一直在跟踪开始和结束索引,我的编辑数组看起来像这样:
edits = [
{
start: 5
end: 8
},
{
start: 3
end: 5
}
]
现在让我们说我想“回去”一个编辑。我模拟了原始数组索引的更改,而没有创建新数组或更改原始数组。
现在在这一点上假设我有一个映射,如果索引值发生了变化,索引值的位置(偏移量等于删除的块的长度)。
示例 - 如果我从索引5中删除到8,我将跟踪原始数组中索引5之后的所有内容现在将落后于3(8-5)个索引。指数5之前的所有内容都将保持在同一位置。
我可以在原件的副本上使用.set
或.subarray
吗?这会比循环原始数组并根据原始数组中的某个偏移索引在新数组上设置值更快吗?
内存使用也是一个问题,所以我想尝试使用类型数组的现有缓冲区尽可能这样做。