【问题标题】:Shorthand for "If greater than, then equal to" in Acttionscript?Acttionscript中“如果大于,则等于”的简写?
【发布时间】:2015-02-27 20:15:35
【问题描述】:

有没有写下面代码的速记方法?通常在游戏中,我们希望确保某些事物不会离开边界,或者更一般地说,我们希望阻止数组的索引超出数组的边界。我一直是这样写的,但想知道 Actionscript、Java 或 C# 中是否有简写

在动作脚本中:

index++;
if (index > array.length - 1) index = array.length - 1;

据我所知,没有任何运营商可以做到这一点,尽管我可能弄错了。我知道三元运算符类似if (condition) ? value if true : value if false

【问题讨论】:

  • 您真正对哪种语言感兴趣?如果您需要知道 Java、C# 和 ActionScript 的答案,那么您应该分别提出三个问题;否则,当大多数人只会给你三个中的一个时,你将如何接受正确的答案?
  • 它们对于我的需要来说都是相对相同的。如果有区别,我可以google一下。对我来说,它并不完全特定于 AS3,但这就是我正在使用的

标签: java c# actionscript-3 operators ternary-operator


【解决方案1】:

您可以使用Math.min

index = Math.min (index+1, array.length-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#。

【讨论】:

  • if false 的值会不会是 index++
  • @PremierBromanov 也可以。如果要增加,然后检查,那么 index++ 应该在整个语句之前。如果你想检查,然后增加或做另一个,那么是的,index++ 应该在那里代替index
  • 好的。很高兴知道,但我认为 index = Math.min (index+1, array.length-1); 更简洁易读,尽管从技术上讲,你的是速记的,而他的不是。
  • @PremierBromanov Mine 是一个更普遍的情况。对于这个特定的实例,使用Math.min 肯定更具可读性,但它并不是您在任何地方都可以使用的。
  • 是的。尽管在检查某物是否大于最大值或小于零的情况下,按照另一个建议编写Math.Max(Math.Min(index, array.Length - 1), 0); 更简单。这就是为什么你们都得到 +1
【解决方案3】:

如果您的代码如下所示(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);

【讨论】:

  • 那不是伪代码。这是对应该发生的事情的文字描述。
  • 第一个速记有效,假设我们只讨论整数和单个增量。否则没有。但是,这我问的,所以我不反对你:)
  • RangeCheck 也非常方便,但不足以让我写一个,因为我没有在这个特定代码中检查所有范围
【解决方案4】:

试试下面的方法,它也更有效率,因为你不会做不必要的增量:

if( index < array.length ) index++;

【讨论】:

    猜你喜欢
    • 2022-01-17
    • 2012-09-11
    • 1970-01-01
    • 2014-11-09
    • 2022-01-05
    • 1970-01-01
    • 2020-09-01
    • 1970-01-01
    相关资源
    最近更新 更多