我有一个int类型的长度为300的数组。大多数元素都是0,我想得到第一个元素的索引大于0.我怎么能实现这个。
谢谢
答案 0 :(得分: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库中相当常见)或异常,具体取决于您的口味。
答案 1 :(得分: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)
答案 2 :(得分: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));
答案 3 :(得分:1)
如果要获取其值,可以使用LINQ:
array.Where(x=>x>0).First
如果你想要它的索引,你可以使用LINQ,但它比直接循环更复杂 - 遍历所有元素并查看其中一个元素是否为0。
答案 4 :(得分:0)
int count=0;
for(int i=0;i<numbers.Length;i++)
{
if(numbers[i]>0)
{
break;
}
count++;
}
最后得到变量计数的值,这将是索引。
答案 5 :(得分:0)
int result;
foreach (int i in array)
if (i > 0)
{
result = i;
break;
}
由于你只想要第一个,你可以在找到它时立即中断。