在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#中是否有直接的方法/函数,我可以传入一个锯齿状数组并产生相同的输出?
答案 0 :(得分: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));
请注意,这并不会检查您的指数是否全部在范围内。
答案 1 :(得分: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()
。
答案 2 :(得分:1)
还有Array.Sort(keys, values)
- MSDN
答案 3 :(得分: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
范围内。