2013-06-13 2 views
8

2 개의 배열이 있습니다. 같은 인덱스 번호로 정렬하고 싶습니다. 예를 들어 나는이 있습니다동일한 색인으로 두 개의 배열을 정렬하는 방법은 무엇입니까?

int[] a = {120, 60, 50, 40, 30, 20}; 
int[] b = {12, 29, 37, 85, 63, 11}; 

Array.Sort(b); // Now, b is -> b = {11, 12, 29, 37, 63, 85} 

내가 B의 색인으로 정렬하려면 ->a = {20, 120, 60, 50, 30, 40}

내가 B의 인덱스로 C 정렬 할 문자열 배열을 또한 c -> c = {"b", "u", "r", "s", "a", "1"}

이있는 경우 ->c = {"1", "b", "u", "r", "a", "s"}

내가 어떻게 할 수 있습니까? 사전에 감사, 감사합니다. 두 개의 입력 배열을 받아

+2

봐는 : http://stackoverflow.com/questions/1760185/c-sharp-sort-list-while-also-returning-the-original-index-positions –

+0

이 나에게 유용합니다 . Array.Sort (b, d); – 1teamsah

답변

21

사용 Array.Sort<TKey, TValue>(TKey[] keys, TValue[] items), 하나는 다른 하나는 그 키를 사용하여 정렬 할 항목의 배열, 키의 배열입니다. 여기에서 당신을 위해 b이 당신의 열쇠이고 a이 당신의 아이템입니다. 따라서

:

Array.Sort(b, a); 

a의 항목을 정렬하는 b의 키를 사용합니다.

나는 cb로의 인덱스를 정렬 할 ->c = {"1", "b", "u", "r", "a", "s"}

뜻을 정확하게 명확하지 않습니다. 동시에 ab을 사용하여 정렬 하시겠습니까? 그렇다면 위와 같은 방법으로 쉽게 사용할 수 있습니다. Tuple<int, string> 단일 배열로 ac 지퍼. 이어서

var d = a.Zip(c, (x, y) => Tuple.Create(x, y)).ToArray(); 

: 위와

Array.Sort(b, d); 

. 그런 다음 조각을 추출 :

a = d.Select(z => z.Item1).ToArray(); 
c = d.Select(z => z.Item2).ToArray(); 

을 다른 방법으로, 동일한 키 세트를 사용하여 배열을 많이 정렬해야하는 경우 : 지금 당신은 당신이 필요로하는 모든 배열을 정렬 할 indexes을 사용할 수 있습니다

int[] indexes = Enumerable.Range(0, b.Length).ToArray(); 
Array.Sort(b, indexes); 

. 예를 들면,

등. 여기

아마도 몇 가지 사소한 코딩 오류. 편리한 컴파일러가 아닙니다. 이 질문에

+0

이 중대하다,하지만 난 [] System.Collections.IComparer을 구현하지 두 배로 버전으로 인해 1.3 전에 .NET 표준 작업을 얻을 수 없습니다. –

2
// a dirty and inefficient way of doing it, 
// but should give you a heads up to get started 

    // you obviously dont want to modify array b, so making a copy 
    int[] c = Arrays.copyOf(b, b.length); 
    // now apply a sort on 'c' and apply the same operation on 'a' when modifying 'c' 
    // -> applying a bubble sort - > inefficient 
    for(int i = 0; i < c.length ; i ++) { 
     for(int j = 0 ; j < c.length - 1; j ++) { 
      if(c[j] > c [j+1]) { 
       c[j] = c[j] + c[j+1]; 
       c[j+1] = c[j] - c[j+1]; 
       c[j] = c[j] - c[j+1]; 

       // apply the same to a 
       a[j] = a[j] + a[j+1]; 
       a[j+1] = a[j] - a[j+1]; 
       a[j] = a[j] - a[j+1]; 
      } 
     } 
    } 
관련 문제