1

私はこの配列を持っています:

float[] sizeEdge = new float[12,43,556,98];

私の質問は一部の人にとってはナイーブに思えるかもしれませんが、私は .NET に慣れていないので、最大数の配列インデックスを取得する必要があります。

どうすれば実装できますか?

前もって感謝します。

4

7 に答える 7

1

IEnumerable.Max()次のような方法を使用できます。

一連の値の最大値を返します。

float[] sizeEdge = new float[] { 12f, 43f, 556f, 98f };
int maxIndex = Array.IndexOf(sizeEdge, sizeEdge.Max());
Console.WriteLine(sizeEdge[maxIndex]);

結果は次のようになります。

556

ここにDEMO.

于 2013-06-04T08:17:02.460 に答える
1

これは機能するはずです。に一般化IEnumerable<float>:

// Returns index of maximum value, or -1 if there are no numbers.

int IndexOfMax(IEnumerable<float> numbers)
{
    float max = 0;
    int indexOfMax = -1;
    int index = 0;

    foreach (var number in numbers)
    {
        if ((number > max) || (indexOfMax < 0))
        {
            indexOfMax = index;
            max = number;
        }

        ++index;
    }

    return indexOfMax;
}

.Max()これは、両方を使用した場合のように 2 回ではなく、1 回だけ配列をトラバースするIndexOf()ため、多少高速になるはずです。

IComparable<T>これを次のように実装する型に一般化できます。

// Returns index of maximum value, or -1 if there are no numbers.

int IndexOfMax<T>(IEnumerable<T> numbers) where T: IComparable<T>
{
    T max = default(T);
    int indexOfMax = -1;
    int index = 0;

    foreach (var number in numbers)
    {
        if ((number.CompareTo(max) > 0) || (indexOfMax < 0))
        {
            indexOfMax = index;
            max = number;
        }

        ++index;
    }

    return indexOfMax;
}
于 2013-06-04T08:22:11.287 に答える
1

の代替バージョンを使用できますselect

float[] sizeEdge = new float[12,43,556,98];

var maxIndex = sizeEdge.Select((x,i) => new { value = x, index = i})
                       .OrderByDescending(x => x.value)
                       .Select(x=> x.index)
                       .FirstOrDefault();
于 2013-06-04T08:49:12.420 に答える