2013-05-03 24 views
1

我需要從最小值到最大值對數組進行排序,但是我只需要在排序後返回數組的索引。我不想交換價值,我只需要根據價值大小如按照c中元素大小對數組進行排序並返回數組索引#

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。

回答

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 
+0

我米使用名稱的收藏價值,我想從那裏用得值getvalue,比較它們,然後根據大小返回一個索引。 – 2013-05-03 06:18:56

+1

@ user2345759,你的例子是一個int數組。我想你可以在集合中實現類似的功能。 – Habib 2013-05-03 06:20:38

+0

謝謝。我會嘗試。 – 2013-05-03 06:22:39

2
var indexes = arr.Select((i, inx) => new { i, inx }) 
        .OrderBy(x => x.i) 
        .Select(x => x.inx) 
        .ToArray(); 
相關問題