根据用户提供的索引对二维数组进行排序

本文关键字:二维数组 排序 索引 用户 | 更新日期: 2023-09-27 18:33:56

在python中,有一个功能(numpy.take)可以对数组中的数组进行排序,例如,如果我有一个数组(3x3):

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

我有一系列设置索引

indices = [2, 0, 1]

结果应为

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

是否有任何直接的方法/函数,如 C# 中的这些方法/函数,我可以在其中传入交错数组并生成相同的输出?

根据用户提供的索引对二维数组进行排序

不是直接的,但你可以用 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));

请注意,这不会检查您的索引是否都在范围内。

您可以使用 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()如果您更喜欢列表。

还有Array.Sort(keys, values) - MSDN

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 中没有越界。