根据用户提供的索引对二维数组进行排序
本文关键字:二维数组 排序 索引 用户 | 更新日期: 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
中没有越界。