2012-04-11 47 views
0

我有一个列表。如果您输入的值在该列表中,则返回结果。即使值超出结果范围 - 由于mod%,结果也会返回。 这真的很难用言语解释我的问题,所以我们来看看代码从列表中返回值超出列表范围的索引值C#

 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。这个数字是不变的。所有的测量都是根据这个数字进行的。
  • value - 我们输入的值。我们需要得到的结果为这个值
  • 结果 - 只是一个字符串

这就是它是如何工作的:

STARTING_NUMBER = 3,值= 2 =>结果= “野应”(因为2 =的IndexOf(STARTING_NUMBER) - 1)

STARTING_NUMBER = 6,值= 0 =>结果= “酷” (6 + 1 = 0)

STARTING_NUMBER = 0,value = 6 =>将发生错误。 (0 - 1 = 6)

任何想法如何改善代码来摆脱此错误?基本上我可以抓取值是“之后”starting_number,但我无法抓住他们“之前”starting_number。

  • (6 + 1 = 0)的情况下:表看起来是6,0,1,2,3 ...

  • 在的情况下,(0 - 1 = 6):名单应该是这样的...... 4,5,6,0

,如果您有任何疑问,请向..它真的很难解释文字的问题,但我想提出的实例它更清楚。

如何获取低于starting_number的值?

+2

你还没有实际问过一个问题... – 2012-04-11 09:18:52

+0

任何想法如何改善代码来摆脱这个错误?基本上我可以抓取值是“之后”starting_number,但我无法抓住他们“之前”starting_number。 – Alex 2012-04-11 09:27:40

+0

这导致我们:**您如何获取低于starting_number的值?** – Alex 2012-04-11 09:28:59

回答

3

如果我理解正确的,你想将所有整数映射到范围0到计数-1和当前的公式是x % count只有当x > 0工作。然后,如果你想它的工作的所有值x尝试这一个(x % count + count) % count

+0

+1您的解决方案也可以工作。谢谢! – Alex 2012-04-11 09:39:01

+0

@Alex它不能工作,因为Likurgs给你不同于我的号码,当start_index <= 0时 – user1096188 2012-04-11 09:42:49

1

尝试使用此代码

list1[Math.Sign((list1.IndexOf(starting_number) - 1))*(list1.IndexOf(starting_number) - 1) % list1.Count()]