打扰一下,但我很难解释。
更多信息
我正在制作一款游戏,该游戏根据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}
这行得通,但我不禁要问,我是否缺少某些东西,是否有更简单的方法来实现自己的目标。
答案 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
HTH