2016-02-08 2 views
0

В Python есть функциональные возможности (numpy.take) для сортировки массивов в массиве, например, если у меня есть массив (3х3):Сортировка 2D массив на основе пользовательских индексов при условии,

a = [[1, 2, 3],[7,9,10],[3, 5,6]] 

и я массив набора индексов

indices = [2, 0, 1] 

результат должен быть

array([[ 3, 5, 6], [ 1, 2, 3], [ 7, 9, 10]]). 

существуют ли какие-либо прямые методы захода на посадку/ФУНКЦИИ ns как они в C#, где я могу пройти в зубчатый массив и создать тот же результат?

ответ

3

Не сразу, но вы можете достичь того же с Linq

var a = new[] { new[] { 1, 2, 3 }, new[] { 7, 9, 10 }, new[] { 3, 5, 6 } }; 
var indices = new [] { 2, 0, 1 }; 
var sorted = indices.Select(i => a[i]).ToArray(); 
foreach(var s in sorted) Console.WriteLine(string.Join(", ", s)); 

Примечание это не проверяет, что ваши показатели находятся в пределах досягаемости.

2

Вы можете сделать это легко с помощью LINQ:

var a = new[] { new[] { 1, 2, 3 }, new[] { 7, 9, 10 }, new[] { 3, 5, 6 } }; 
var indices = new[] { 2, 0, 1}; 

var result = indices 
    .Select(i => a[i]) 
    .ToArray(); 

Или .ToList(), если вы предпочитаете списки.

0
var a = new[] 
{ 
    new[] {1, 2, 3}, 
    new[] {7, 9, 10}, 
    new[] {3, 5, 6} 
}; 

var indices = new[] {2, 0, 1}; 

var sortedArray = a.SortEx(indices); 

Где SortEx является

public static class Extensions 
{ 
    public static T[][] SortEx<T>(this T[][] source, int[] indices) 
    { 
     return indices.Select(index => source[index]).ToArray(); 
    } 
} 

Это предполагает, что все индексы в массиве indices не из связанного в a.

1

Существует также Array.Sort(keys, values) - MSDN

Смежные вопросы