【问题标题】:Haxe get array last elementHaxe 获取数组最后一个元素
【发布时间】:2020-04-04 11:40:25
【问题描述】:

在 haxe 中,除了使用 arr[arr.length-1] 作为键之外,还有其他方法可以获取数组的最后一个元素吗?我想避免需要对数组的引用。

【问题讨论】:

  • > 我想避免需要对数组的引用。这有什么具体原因吗?无论如何,您似乎都需要引用:在没有引用的情况下,您实际上如何访问数组?
  • @Chii 当数组从函数返回时,我只关心最后一个元素。使用 gamas 解决方案,我可以做var thing = someFunction().last(),而不需要先将整个数组存储在某个临时变量中以获得长度。

标签: arrays haxe


【解决方案1】:

不,但您可以为它创建一个static extension

using ArrayExtensions;

class Main {
    static function main() {
        var a = [1, 2, 3];
        trace(a.last()); // 3
    }
}
class ArrayExtensions {
    public static inline function last<T>(a:Array<T>):T {
        return a[a.length - 1];
    }
}

或者,您可以使用自定义抽象重载数组访问运算符以获取 Python 样式的负索引:

class Main {
    static function main() {
        var a:PythonArray<Int> = [1, 2, 3];
        trace(a[-1]); // 3
    }
}

@:forward
abstract PythonArray<T>(Array<T>) from Array<T> to Array<T> {
    @:arrayAccess function get(i) {
        return if (i < 0) this[this.length - i * -1] else this[i];
    }

    @:arrayAccess function set(i, v) {
        return if (i < 0) this[this.length - i * -1] = v else this[i] = v;
    }
}

这有一个缺点,数组必须被输入为抽象。

【讨论】:

    【解决方案2】:

    实现相似的两种模糊方法,Gama11 解决方案似乎更好,但如果重要,请始终检查目标的速度,我在 js 测试中使用 null,但通常最好设置为有效值,一些目标可能需要 Null 或类似。

    using Test;
    class Test {
        static function main() {
            var arr = [0,1,2,3];
            trace( arr.last() );
        }
        static inline function last<T>( arr: Array<T>, j=null ){
            for( i in arr ) j = i;
            return j;
        }
    }
    

    这似乎会创建更冗长的代码。

    class Test {
        static function main() {
            var arr = [0,1,2,3];
            var j = null;
            arr.map((i)->j=i);
            trace(j);
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-09-29
      • 2016-09-29
      • 1970-01-01
      • 2018-08-17
      • 2011-09-09
      • 2016-08-26
      • 1970-01-01
      • 2022-06-28
      相关资源
      最近更新 更多