按当前值顺序获取索引数组

时间:2019-11-13 12:47:15

标签: c# arrays

打扰一下,但我很难解释。

更多信息

我正在制作一款游戏,该游戏根据ints的数组按程序进行关卡。

所说的int array中的值是可能的GameObject索引的范围,这些索引随后用于生成关卡。

我现在正尝试对程序颜色选择使用相同的int array,但是可能的颜色索引范围小于GameObjects范围。

要解决此问题,我将int array降低到可能的最低唯一值,同时保持其顺序,然后选择最低值直到颜色{{1} }最大索引作为新的array int

预期结果

array

我拥有的

//input
int[]{4,1,62,3,5,74,82,34} 

//lowest unique values in order
int[]{2-0-5-1-3-6-7-4}

//required array length(4) in order
int[]{2,0,1,3}

这行得通,但我不禁要问,我是否缺少某些东西,是否有更简单的方法来实现自己的目标。

1 个答案:

答案 0 :(得分:1)

您真正关心的是已排序startArray中项目的索引。您可以使用Linq简化逻辑并消除循环。

这是一个简单的例子:

    int[] startArray = new int[] { 1, 22, 67, 33, 12, 64, 23, 55 };

    var output1 = startArray.Select(n => Array.IndexOf(startArray.OrderBy(x => x).ToArray(), n));
    //startArr Output: 0-2-7-4-1-6-3-5

    int requiredAmount = 4;

    var output2 = output1.Where(n => Array.IndexOf(output1.OrderBy(x => x).ToArray(), n) < requiredAmount);
    //returnArr Output: 0-2-1-3 

还有here is a working Fiddle

HTH