1

我有一个长度为 300 的 int 类型的数组。大多数元素是0,我想获取大于0的第一个元素的索引。我该如何实现这一点。

谢谢

4

6 回答 6

7

使用for循环从索引 0 转到yourArray.length - 1并记录第一个值大于 0 的元素的索引。

int firstIndex = -1;
for (int i = 0; i < yourArray.length; i++) {
    if (yourArray[i] > 0) {
        firstIndex = i;
        break;
    }
}

或者,使用一种i在找到索引时立即返回的方法,而不是中断循环。在这种情况下,根据您的喜好,返回-1(或其他一些不能作为有效索引的值,但 -1 在 .NET 库中相当常见)或异常。

于 2013-04-24T05:15:57.557 回答
5

这个怎么样?

array.ToList().FindIndex(value => value > 0)

或者,为泛型数组创建自己的FindIndex扩展方法:

public static int FindIndex<T>(this T[] array, Predicate<T> predicate) {
    for (int index = 0; index < array.length; index++) {
        if (predicate(array[index]))
            return index;
    }
    return -1;
}

这将消除对 LINQ 和的需要ToList()

array.FindIndex(value => value > 0)
于 2013-04-24T05:15:50.933 回答
3

您可以使用Array.FindIndex获取大于 0 的数组的第一个元素的索引,

var array = new int[5];
array[0] = 0;
array[1] = 0;
array[2] = 1;
array[3] = 1;
array[4] = 0;

int index = Array.FindIndex(array, x=>x > 0);

或者,您可以使用数组的Array.IndexOf方法,

int index = Array.IndexOf(array, array.First(x=>x > 0));
于 2013-04-24T05:23:43.957 回答
1

如果要获取它的值,可以使用 LINQ:

array.Where(x=>x>0).First

如果你想要它的索引,你可以使用 LINQ,但它会比直接循环更复杂——检查所有元素,看看其中一个是否不为 0。

于 2013-04-24T05:15:07.420 回答
0
int count=0;
for(int i=0;i<numbers.Length;i++)
{

  if(numbers[i]>0)
  {
    break;
  }
  count++;
}

最后得到变量count的值,即为index。

于 2013-04-24T05:17:27.817 回答
0
int result;

foreach (int i in array)
    if (i > 0)
    {
        result = i;
        break;
    }

因为你只想要第一个,所以你一找到就可以打破。

于 2013-04-24T05:17:48.053 回答