4

A newbie with C# and LINQ. I have an array which is essentially a counted sequence.

{1,3,5,2,7,2}

I am trying to write a query that returns list of indices with highest values in descending order:

4,2,1,3,5,0

I can get the maximum index with this query below, but I can't seem to work out how to get the next indexes in sequence with a single query.

int index = array.ToList().IndexOf(array.Max());
NASSER
  • 5,900
  • 7
  • 38
  • 57
tarzan
  • 91
  • 4

2 Answers2

10

This works:

var list = new [] {1,3,5,2,7,2};

var indices =
    list
        .Select((n, i) => new { n, i })
        .OrderByDescending(x => x.n)
        .Select(x => x.i)
        .ToArray();
Enigmativity
  • 113,464
  • 11
  • 89
  • 172
5

You can use Select:-

var result = numbers.Select((v, i) => new { Value = v, Index = i })
                                .OrderByDescending(x => x.Value)
                                .Select(x => x.Index).ToArray();

Working Fiddle.

Rahul Singh
  • 21,585
  • 6
  • 41
  • 56