我有一份清单。如果您输入的值在该列表中 - 将返回结果。即使值超出结果范围 - 由于mod%,也会返回结果。 用文字解释我的问题真的很难,所以让我们来看看代码:
List<int> list1 = new List<int>(){ 0, 1, 2, 3, 4, 5, 6 };
int value = 3; // what's this number to us?
string result = "";
int starting_number = 3;
if (value == list1[(list1.IndexOf(starting_number) + 2) % list1.Count()])
{ result = "yeah"; }
else if (value == list1[(list1.IndexOf(starting_number) + 1) % list1.Count()])
{ result = "cool"; }
else if (value == list1[(list1.IndexOf(starting_number) + 0) % list1.Count()])
{ result = "one"; }
else if (value == list1[(list1.IndexOf(starting_number) - 1) % list1.Count()])
{ result = "noo"; }
else {result = "oops cant find it"; }
这就是它的工作方式:
starting_number = 3,value = 2 =&gt; result =“noo”(因为2 = IndexOf(starting_number) - 1)
starting_number = 6,value = 0 =&gt; result =“cool”(6 + 1 = 0)
starting_number = 0,value = 6 =&gt; 将发生错误。 (0 - 1 = 6)
如何改进代码以摆脱此错误的任何想法?基本上我可以抓取值,因为它们是“after”starting_number,但我不能在“before”之前抓住它们。
如果(6 + 1 = 0):列表看起来像这样6,0,1,2,3 ......
如果(0 - 1 = 6):列表应为此... 4,5,6,0
如果您有任何疑问,请询问..用文字解释问题真的很难,但我想这些例子更清楚。
如何获取低于starting_number的值?
答案 0 :(得分:3)
如果我理解正确,您希望将所有整数映射到范围0到Count-1,并且您当前的公式为x % count
,仅在x > 0
时才有效。然后,如果您希望它适用于x
的所有值,请尝试使用(x % count + count) % count
答案 1 :(得分:1)
尝试使用此代码
list1[Math.Sign((list1.IndexOf(starting_number) - 1))*(list1.IndexOf(starting_number) - 1) % list1.Count()]