0

列表:

List<int> list1 = new List<int>(){ 0, 1, 2, 3, 4, 5, 6 };

假设我们要重新排序。开头应该是数字“2”

// 2,3,4,5,6,0,1

或在 5 号

// 5,6,0,1,2,3,4

你如何用 C# 做到这一点?

原因:假设您在 List 中有一个给定数字的索引(数字 3,索引 3)。你想得到右边的第二个数字 - 它将是 5。

不幸的是,如果起始数字在列表的末尾(数字 5 和 6) - 将抛出超出范围的异常,因为没有 7 和 8!

这个想法是重新排序列表!

  • 我们输入 Nr。5 - 我们得到 0 (5,6,0)。
  • 我们输入 Nr。6 - 我们得到 1 (6,0,1) 等。

或者也许还有其他(阅读 - 更好的)方法来解决这个问题?

4

3 回答 3

4

更好的方法是使用 mod 运算符 %。当您将一个 int 除以另一个 int 时,这将为您提供余数。它的工作方式是这样的:

int nextIndex = (currentIndex + offset) % length;

所以,如果你当前的索引是 5,你的偏移量是 2,你的长度是 6,那么:

5 + 2 = 7
7 / 6 = 1 remainder 1 (or 7 mod 6 = 1)
therefore nextIndex = 1
于 2012-04-10T15:47:38.690 回答
3

一个小的 Linq 可以很容易地做到这一点:

List<int> list1 = new List<int>(new[] { 0, 1, 2, 3, 4, 5, 6 });

var numToStart = 4;

//reorderedList will be {4,5,6,0,1,2,3}
var reorderedList = list1.Skip(numToStart).Concat(list1.Take(numToStart));
于 2012-04-10T15:47:46.430 回答
2

您无需重新排序列表。您可以使用以下函数获取号码:

int GetNumber(List<int> list, int fromValue, int index) 
{
    return list[(list.IndexOf(fromValue) + index) % list.Count()];
}

你可以这样调用函数:

List<int> list1 = new List<int>(new[] { 0, 1, 2, 3, 4, 5, 6 });
int number = GetNumber(list1, 5, 2); // number = 0
于 2012-04-10T15:48:44.217 回答