¿Cómo ordenar dos matrices por el mismo índice?

Tengo 2 matrices. Quiero ordenarlos por el mismo número de índice. Por ejemplo tengo estos:

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} 

Quiero ordenar el índice de a por b -> a = {20, 120, 60, 50, 30, 40}

Si también tengo una matriz de cadenas c -> c = {"b", "u", "r", "s", "a", "1"}

Quiero ordenar el índice de c por b -> c = {"1", "b", "u", "r", "a", "s"}

¿Cómo puedo hacer esto? Gracias de antemano, Saludos.

Use Array.Sort(TKey[] keys, TValue[] items) que acepte dos matrices de entrada, una es la matriz de teclas, la otra es la matriz de elementos para ordenar usando esas teclas. Aquí, para ti, b son tus llaves y a son tus artículos.

Así:

 Array.Sort(b, a); 

utilizará las teclas de b para ordenar los elementos de a .

Quiero ordenar el índice de c por b -> c = {"1", "b", "u", "r", "a", "s"}

No está claro exactamente lo que quieres decir. ¿Al mismo tiempo que ordenas a b ? Si es así, es fácil ya que todavía podemos usar lo anterior. Zip c en una única matriz de Tuple .

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

Entonces:

 Array.Sort(b, d); 

como anteriormente. Luego extrae las piezas:

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

Alternativamente, si necesita ordenar muchos arreglos usando el mismo conjunto de claves:

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

Ahora puede usar indexes para ordenar todos los arreglos que necesita. Por ejemplo:

 a = indexes.Select(index => a[index]).ToArray(); c = indexes.Select(index => c[index]).ToArray(); 

etc. según sea necesario.

Posiblemente algunos errores menores de encoding aquí. No hay comstackdor a mano.

 // 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]; } } }