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
所建议的那样),那么尝试优化它可能是浪费时间。如果您需要更好的性能,那么您可能需要为信息排序而设计的不同数据结构。