包装数组迭代

时间:2018-06-15 13:37:18

标签: c# iteration

我需要一种机制来通过带有初始偏移的for循环迭代数组中的所有元素,而不会被边界异常捕获。

这是为了制作我自己的"选择器"或者" Fruit Machine Roller" UI元素类似于Android和Apple设备中使用的UI元素,因此在可见列表顶部消失的条目将环绕到底部,反之亦然,没有可靠的结束。

由于代码是在没有链接列表的预先存在的生态系统中使用的,我想出了这个紧凑的轻量级解决方案(伪c#片段):

int positionOffset; // can be set negative or positive;

for (int i = 0; i < elements.size; ++i) {
    int wrappedPos = ((elements.size * Math.Abs(i + positionOffset)) + i + positionOffset) % elements.size; 
    var element = elements[wrappedPos];
}

这尊重源集合的边界,但允许初始偏移以无限的方式为负或正,即您可以指定偏移数字,如3002或-21451。结果是positionOffset将被缠绕到相对于集合大小的适当元素位置。

这可以类似于Python如何迭代具有负数或正数的集合,而不一定在源集合的范围内。

我想不出任何其他方法将元素包装在初始元素位置后面,这不会涉及昂贵的复制和拼接,因为我正在开发的是低功耗嵌入式系统。

有没有人在这里看到任何问题或建议任何其他方法来进行此包装迭代?

0 个答案:

没有答案