Flash 如何保证Actionscript中对象上每个循环的顺序

Flash 如何保证Actionscript中对象上每个循环的顺序,flash,actionscript-3,actionscript,Flash,Actionscript 3,Actionscript,假设我有一个函数,我想用它按排序顺序显示对象的属性: function showObject(obj:Object) { for ( var key in obj ) { trace("key: " + obj[key]); } } 我理解,这不保证以任何特定顺序进行;要做到这一点,最好的办法是什么,但要保证有序?你不能。这是一个散列算法,特别是用于…的,用于枚举动态(如散列)属性。如果您需要它来返回一个有序列表,您应该使用一个数组或创建一个有序的散列类,您可以

假设我有一个函数,我想用它按排序顺序显示对象的属性:

function showObject(obj:Object) {
    for ( var key in obj ) {
        trace("key: " + obj[key]);
    }
}

我理解,这不保证以任何特定顺序进行;要做到这一点,最好的办法是什么,但要保证有序?你不能。这是一个散列算法,特别是用于…的,用于枚举动态(如散列)属性。如果您需要它来返回一个有序列表,您应该使用一个数组或创建一个有序的散列类,您可以按顺序进行迭代。只是要明白,您将无法使用for…in循环来完成它。您必须构建迭代器来处理该逻辑本身,只需对其调用.next(),即可让它按顺序返回下一项。

您不能这样做。这是一个散列算法,特别是用于…的,用于枚举动态(如散列)属性。如果您需要它来返回一个有序列表,您应该使用一个数组或创建一个有序的散列类,您可以按顺序进行迭代。只是要明白,您将无法使用for…in循环来完成它。您必须构建迭代器来处理该逻辑本身,只需对其调用.next(),即可让它按顺序返回下一项。

这对您有用吗

function showObject(obj:Object) {
    var keys:Array = new Array();
    var key;
    for ( key in obj ) {
        keys.push(key);
    }
    keys.sort();
    for ( key in obj ) {
        trace(key + ": " + obj[key]);
    }
}

这对你有用吗

function showObject(obj:Object) {
    var keys:Array = new Array();
    var key;
    for ( key in obj ) {
        keys.push(key);
    }
    keys.sort();
    for ( key in obj ) {
        trace(key + ": " + obj[key]);
    }
}

这就是我最后做的,我只是不知道是否有更好的方法。谢谢。@Fragsworth,可能有,但如果只是调试代码(正如您使用
trace
所建议的那样),那么尝试优化它可能是浪费时间。如果您需要更好的性能,那么您可能需要一种为信息排序而设计的不同数据结构。这就是我最终要做的,我只是不知道是否有更好的方法。谢谢。@Fragsworth,可能有,但如果只是调试代码(正如您使用
trace
所建议的那样),那么尝试优化它可能是浪费时间。如果您需要更好的性能,那么您可能需要为信息排序而设计的不同数据结构。