是否有编写以下代码的简写方法?通常在游戏中,我们希望确保某些事物不会留下边界,或者更一般地说,我们希望阻止数组的索引超出数组的范围。我总是用这种方式编写它,但我想知道在ActionScript,Java或C#中是否有简写#
在Actionscript中:
index++;
if (index > array.length - 1) index = array.length - 1;
据我所知,没有运营商可以实现这一点,但也许我错了。我知道三元运算符类似于if (condition) ? value if true : value if false
答案 0 :(得分:2)
您可以使用Math.min
:
index = Math.min (index+1, array.length-1);
答案 1 :(得分:2)
对于if (condition) set variable
的通用条件(与您的具体情况相反),您可以使用以下内容:
variable = (condition) ? (set if true) : (set if false)
在你的情况下,这转为:
index = index > array.length - 1 ? index = array.length - 1 : index;
它适用于Java,Actionscript和C#。
答案 2 :(得分:1)
如果你的代码看起来像这样(C#):
index++;
if (index > array.length - 1)
index = array.length - 1;
无论如何,你都在进行相等测试,那么为什么不在作业之前去做呢?
if (index < array.Length)
index++;
我不知道C#中的任何简短方法,但您可以编写自己的扩展程序以便使用,因此您不必在整个代码中复制/粘贴支票:
public static class ArrayExtensions
{
// Returns the index if it falls within the range of 0 to array.Length -1
// Otherwise, returns a minimum value of 0 or max of array.Length - 1
public static int RangeCheck(this Array array, int index)
{
return Math.Max(Math.Min(index, array.Length - 1), 0);
}
}
使用它:
var index = yourArray.RangeCheck(index);
答案 3 :(得分:1)
尝试以下操作,它也更有效率,因为您不会做出不必要的增量:
if( index < array.length ) index++;