根据另一个数组中给出的索引顺序重新定位数组中的项
本文关键字:数组 新定位 定位 索引 另一个 顺序 | 更新日期: 2023-09-27 17:49:28
我有如下两个数组:
string[] alb = new string[5]
{
"B","Z","C", "E","T"
};
int[] orderedIndexes = {0,3,4,1,2}
基于第二个数组中给出的索引,我想对齐第一个数组中的项。我不想使用另一个数组作为缓冲区,并且喜欢使用相同的数组来交换项。我期望的结果是
alb = {"B","E","T","Z","C"}.
注意:因为真正的问题是有真正的商业价值,我不能张贴我做的作业。
linq的答案绝对很棒,但我认为用老派的数组操作方式解决它会很有趣。此外,问题的一部分提到没有创建缓冲区,这对我来说,linq的答案有点违反。不管怎样,为了它的价值…
using System;
namespace x
{
class Program
{
static void Main()
{
var alb = new[] { "B","Z","C","E","T" };
int[] orderedIndexes = {2,0,1,4,3};
for (var i = 0; i < orderedIndexes.Length; i++)
{
var x = orderedIndexes[i];
var ts = alb[i];
alb[i] = alb[x];
alb[x] = ts;
x = Array.IndexOf(orderedIndexes, i);
var ti = orderedIndexes[i];
orderedIndexes[i] = orderedIndexes[x];
orderedIndexes[x] = ti;
}
for (var i = 0; i < orderedIndexes.Length; i++)
{
Console.WriteLine("{0}, {1}", i, alb[i]);
}
}
}
}
首先,您应该检查该索引数组是否为有效的索引数组,如下所示:
var isValidIndex = !Enumerable.Range(0, alb.Length - 1).Except(orderedIndexes).Any();
那么你可以简单地像这样在orderedIndexes
上使用Select
:
var result = orderedIndexes.Select(i => alb[i]).ToArray();
//result: {"B","E","T","Z","C"}