【发布时间】:2012-01-31 16:31:39
【问题描述】:
我有一个列表 List A 由字符串 {"a", "b", "c", "d", "e"} 组成。
我的程序在迭代中运行,并且对于每次迭代,我想创建一个新列表List B,它将包含相同的字符串,但它们中的每一个都应该移动到左侧的一个位置。以下是List B 在前三个迭代中应该是什么样子的示例:
- 迭代,列表B应该是:
listB = {"a", "b", "c", "d", "e"} - 迭代,列表B应该是:
listB = {"b", "c", "d", "e", "a"} - 迭代,列表B应该是:
listB = {"c", "d", "e", "a", "b"}
等等……
我已经通过以下方法实现了所需的功能:
private List<string> CalculateQueueOrder(List<string> listA, int iterationNum)
{
int listACount = listA.Count;
List<string> listB = new List<string>();
for (int i = 0; i < listACount; i++)
{
for (int j = 0; j < listACount; j++)
{
int order = ((j - iterationNum) % listACount + 1);
if (order == i)
{
string listItem = listA[j];
listB.Add(listItem);
break;
}
}
}
return listB;
}
但是,这种方法存在问题。随着迭代次数的增加,j - iterationNum 开始返回负值,这使得模数也开始返回负值。整个功能失败。我需要让模数始终返回正值,就像在 Microsoft Excel(mod 函数)中所做的那样。
您能帮我解决int order 的公式吗?谢谢。
【问题讨论】:
-
您是否致力于这种双循环范式?我认为您可以根据列表大小和迭代次数在 O(1) 时间内计算出您需要移动多少,然后简单地构建一个新列表。
-
@ErikDietrich 任何解决方案都可以。我不介意放弃 2 循环的想法。你能帮帮我吗?