As3按字母顺序和数字同时排序

时间:2013-04-17 18:24:16

标签: actionscript-3 sorting

所以我有一个排序方法,用于按字母顺序排序值,几乎在所有情况下都很有效:

function alphabetical(name1, name2):int { 
        if (name1 < name2){ 
            return -1; 
        } else if (name1 > name2){ 
            return 1; 
        }else { 
            return 0; 
        };
    };

问题是,当标题中包含数字时。

例如:

['abc 8','abc 1','abc 10']

会排序

['abc 1','abc 10','abc 8']

但我需要做的是按字母顺序排序,但当遇到数字时会考虑数值,因此排序会返回

['abc 1','abc 8'.'abc 10']

我希望有一些现有的正则表达式或算法可以做到这一点,但我恐怕我没有丝毫想知道要搜索什么。我对排序的所有搜索都按字母顺序或数字顺序进行,而不是两者都进行。

非常感谢!

1 个答案:

答案 0 :(得分:4)

我找到了一个转换为AS3的JavaScript解决方案:Sort mixed alpha/numeric array

解决方案看起来像:

var reA = /[^a-zA-Z]/g;
var reN = /[^0-9]/g;
function sortAlphaNum(a,b) {
    var aA = a.replace(reA, "");
    var bA = b.replace(reA, "");
    if(aA === bA) {
        var aN = parseInt(a.replace(reN, ""), 10);
        var bN = parseInt(b.replace(reN, ""), 10);
        return aN === bN ? 0 : aN > bN ? 1 : -1;
    } else {
        return aA > bA ? 1 : -1;
    }
}

var arr = ['abc 8','abc 1','abc 10'];
arr.sort(sortAlphaNum);

trace(arr); // abc 1,abc 8,abc 10