Haxe 获取数组最后一个元素
Haxe get array last element
在 haxe 中,除了使用 arr[arr.length-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;
}
}
这有一个缺点,那就是必须将数组键入为该抽象。
实现相似的两种模糊方法,Gama11 解决方案似乎更好,但如果它很重要,请始终检查目标上的速度,我在 js 测试中使用了 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);
}
}
在 haxe 中,除了使用 arr[arr.length-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;
}
}
这有一个缺点,那就是必须将数组键入为该抽象。
实现相似的两种模糊方法,Gama11 解决方案似乎更好,但如果它很重要,请始终检查目标上的速度,我在 js 测试中使用了 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);
}
}