使用C#从列表中返回超出列表范围的索引的值

时间:2012-04-11 09:16:42

标签: c# list sorting

我有一份清单。如果您输入的值在该列表中 - 将返回结果。即使值超出结果范围 - 由于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。这个数字是不变的。所有测量均与此数字相关。
  • value - 我们输入的值。我们需要得到这个值的结果
  • 结果 - 只是一个字符串

这就是它的工作方式:

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的值?

2 个答案:

答案 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()]