列表:
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#做的?
原因:想象一下,你在列表中有一个给定数字的索引(数字3,索引3)。你想从右边得到第二个数字 - 它将是5。
不幸的是,如果起始编号 处的(编号5和6) - 将抛出超出范围的异常,因为没有7和8!
我们的想法是重新排序List!
或者还有其他一些(阅读 - 更好)的方法来解决这个问题?
答案 0 :(得分: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
答案 1 :(得分: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));
答案 2 :(得分: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