1

我需要从最小值到最大值对数组进行排序,但排序后只需要返回数组的索引。我不想交换值,我只需要根据值大小返回值索引,例如

int[] arr = {7,8,2,3,1,5};
for (int i=0; i<=arr.length; i++)
{
   int index = Array.IndexOf(arr, i);
}

现在我想将值的索引从最小值返回 为 4、2、3、5、0、1。

4

2 回答 2

6

您在 for 循环中的检查是错误的,它应该是i < arr.Length。对于索引,您可以执行以下操作:

int[] arr = { 7, 8, 2, 3, 1, 5 };
int[] sortedIndexArray = arr.Select((r, i) => new { Value = r, Index = i })
                            .OrderBy(t => t.Value)
                            .Select(p => p.Index)
                            .ToArray();

对于输出:

foreach(int item in sortedIndexArray)
    Console.WriteLine(item);

输出:

4
2
3
5
0
1
于 2013-05-03T06:13:42.160 回答
2
var indexes = arr.Select((i, inx) => new { i, inx })
                  .OrderBy(x => x.i)
                  .Select(x => x.inx)
                  .ToArray();
于 2013-05-03T06:13:53.340 回答