Edm*_*jas 74 c# arrays indexing
所以我有一个未排序的数值数组int[] anArray = { 1, 5, 2, 7 };
,我需要得到数组中最大值的值和索引,这将是7和3,我该怎么做?
sa_*_*213 116
这不是最迷人的方式,但有效.
(必须using System.Linq;
)
int maxValue = anArray.Max();
int maxIndex = anArray.ToList().IndexOf(maxValue);
Run Code Online (Sandbox Code Playgroud)
asr*_*asr 40
int[] anArray = { 1, 5, 2, 7 };
// Finding max
int m = anArray.Max();
// Positioning max
int p = Array.IndexOf(anArray, m);
Run Code Online (Sandbox Code Playgroud)
Tom*_*ing 25
如果索引未排序,则必须至少迭代一次数组才能找到最高值.我用一个简单的for
循环:
int? maxVal = null; //nullable so this works even if you have all super-low negatives
int index = -1;
for (int i = 0; i < anArray.Length; i++)
{
int thisNum = anArray[i];
if (!maxVal.HasValue || thisNum > maxVal.Value)
{
maxVal = thisNum;
index = i;
}
}
Run Code Online (Sandbox Code Playgroud)
这比使用LINQ或其他单行解决方案更加冗长,但它可能会更快一些.实际上没有办法比O(N)更快.
mil*_*ose 12
强制性LINQ one [1] -liner:
var max = anArray.Select((value, index) => new {value, index})
.OrderByDescending(vi => vi.value)
.First();
Run Code Online (Sandbox Code Playgroud)
(排序可能比其他解决方案更受欢迎.)
[1]:对于给定的"一"值.
简洁的单线:
var max = anArray.Select((n, i) => (Number: n, Index: i)).Max();
Run Code Online (Sandbox Code Playgroud)
测试用例:
var anArray = new int[] { 1, 5, 2, 7 };
var max = anArray.Select((n, i) => (Number: n, Index: i)).Max();
Console.WriteLine($"Maximum number = {max.Number}, on index {max.Index}.");
// Maximum number = 7, on index 4.
Run Code Online (Sandbox Code Playgroud)
特征: