ios - 排序字母数字数组,连续的数字应该在最后

标签 ios arrays swift sorting

我想对字母数字进行排序,但数字应该排在末尾而不是开头。例如

let array = ["1", "a", "b", "z", "3", "!"]
let sortedArray = array.sort { (firstObject, secondObject) -> Bool in
    firstObject < secondObject
}

输出:

["!", "1", "3", "a", "b", "z"]

要求的输出:

["a", "b", "z", "1", "3", "!"]

提前致谢。

最佳答案

这是适合您的情况的解决方案:

预期结果是:

  • 字母优先;
  • 然后是数字;
  • 然后是其他人;

这是一种方法。

// Works with both arrays
var array = ["1", "b", "a", "z", "3", "!"]
//var array = ["1", "b", "A", "Z", "3", "!"]

func isLetter(char: String) -> Bool {
    return ("a"..."z").contains(char) || ("A"..."Z").contains(char)
}

func isNumber(char: String) -> Bool {
    return Int(char) != nil
}

let letters = array.filter(isLetter).sort{$0.lowercaseString < $1.lowercaseString}
let numbers = array.filter(isNumber).sort{Int($0) < Int($1)}
let others = Array(Set(array).subtract(letters).subtract(numbers)).sort{$0 < $1}

let sortedArray = letters + numbers + others

第一个数组是

["a", "b", "z", "1", "3", "!"]

第二个是

["A", "b", "Z", "1", "3", "!"]

它做你想做的。包括单元测试并将其包装在一个方法中,您就可以开始了。 Buuuut,它根本不“干净”。

关于ios - 排序字母数字数组,连续的数字应该在最后,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39139427/

相关文章:

ios - 无法获取下载文件的总长度

algorithm - 如何掌握就地数组修改算法?

c++ - 为什么我不能使用与 'const int*' 相同的 'const char*' 创建一个 int 数组?

swift - 无法快速删除 NSURLConnection 中的 NSData 值

ios - if 条件在 swift ios 的 json 响应中

ios - 上传托管的应用内购买内容 Xcode 7

ios - 用UI元素标签来标识元素不会有问题吗?

objective-c - iOS UIWebView - 陷阱异常加载无效文件格式

javascript - 访问数组中的所有元素

swift - 从另一个导航 Controller 调用 segue