如果我有1个,2个,3个,4个,5个,6个,7个阵列并且我处于第4个位置(5号)并且你必须将它移到右边的4个位置,我怎么能这样做呢?应该在第1位(第2位)。负数也是如此,但你向左移动。我想需要while(true)循环?
答案 0 :(得分:8)
假设i
是索引,n
是数组的大小。
积极i
所需索引= i%n
对于否定的i
i%n
,返回负残差,因此所需的索引为n+i%n
您可以使用
int index(int i, int n) {
return i%n < 0 ? n + (i%n) : i%n;
}
答案 1 :(得分:0)
您可以像这样计算索引:
var newIndex = (index + 4) % 7;
所以第四个位置变为(4 + 4)%7或1。
答案 2 :(得分:0)
使用命名函数和可跟随的代码路径更加清晰,而不是使用一个有效的voodoo
public void MyTest()
{
var testData = new[] { 1, 2, 3, 4, 5, 6, 7 };
Assert.AreEqual(2, TraverseCircularArray(testData, 5, 3));
Assert.AreEqual(6, TraverseCircularArray(testData, 2, -4));
}
private int TraverseCircularArray(int[] array, int currentIndex, int interval)
{
var i = array[currentIndex];
if (currentIndex + interval < 0)
i = array[array.Length + (interval + currentIndex)];
else if (currentIndex + interval >= array.Length)
i = array[currentIndex - interval - 1];
else
i = array[currentIndex + interval];
return i;
}