ios - 在 Swift 中交换数组值

标签 ios sorting swift

我在包含字符串数字(作为字符串)的数组中有3个元素

例如,数组包含如下元素

 var elementArray:NSArray //"3","2","1","abc"

排序后变成

var sortedArray = //"1","2","3","abc"

我想把字符串放在最前面,数字放在最后。

预期的输出应该是

var sortedArray = //"abc","1","2","3"

如何交换数组元素。

注意如果数组有多个字符串和数字(​​字符串如"1","2")。字符串(单词或字符)应在前,数字(应按升序排列)在后。

到目前为止我试过了。

 var sortedArray:NSArray = array.sortedArrayUsingComparator({(item1:AnyObject!, item2:AnyObject!) -> NSComparisonResult in
            let comparisonOptions:NSStringCompareOptions =
            NSStringCompareOptions.CaseInsensitiveSearch |
                NSStringCompareOptions.NumericSearch |
                NSStringCompareOptions.WidthInsensitiveSearch |
                NSStringCompareOptions.ForcedOrderingSearch;

            var str1:String = (item1 as String)
            var str2:String = (item2 as String)

            return str1.compare(str2, options: comparisonOptions, range: str1.startIndex ..< str1.endIndex, locale: NSLocale.currentLocale())
        })

返回结果为 "1","2","3","abc"

但预期的输出应该是 "abc","1","2","3"。如何交换数组中的对象。

最佳答案

var elementArray = ["1","2","3","abc","def"]
sort(&elementArray){
    if $0.toInt() != nil && $1.toInt() != nil{
        return $0 < $1
    }
    else if $0.toInt() == nil && $1.toInt() == nil{
        return $0 < $1
    }
    else
    {
        return $0 > $1
    }
}

这应该是工作 结果是 “abc” “def” “1” “2” “3”

如果结果 abc 3 2 1 没问题,就用这个

var elementArray = ["1","2","3","abc","def"]
    sort(&elementArray,>)

这个结果是 "def""abc""3""2""1"

更新:

var elementArray:NSArray = ["1","2","3","abc","def"]
var sortedArray:NSArray = elementArray.sortedArrayUsingComparator({(item1:AnyObject!, item2:AnyObject!) -> NSComparisonResult in
    let comparisonOptions:NSStringCompareOptions =
    NSStringCompareOptions.CaseInsensitiveSearch |
        NSStringCompareOptions.NumericSearch |
        NSStringCompareOptions.WidthInsensitiveSearch |
        NSStringCompareOptions.ForcedOrderingSearch;

    var str1:String = (item1 as String)
    var str2:String = (item2 as String)
    if str1.toInt() != nil && str2.toInt() != nil{
        return str1.compare(str2, options: comparisonOptions, range: str1.startIndex ..< str1.endIndex, locale: NSLocale.currentLocale())
    }
    else if str1.toInt() == nil && str2.toInt() == nil{
        return str1.compare(str2, options: comparisonOptions, range: str1.startIndex ..< str1.endIndex, locale: NSLocale.currentLocale())
    }
    else
    {
        return str2.compare(str1, options: comparisonOptions, range: str1.startIndex ..< str1.endIndex, locale: NSLocale.currentLocale())
    }
})

关于ios - 在 Swift 中交换数组值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26668816/

相关文章:

iPhone RestKit 如何启用 RKLogDebug?

ios - 为什么上下滚动 UITableView 弄乱了我已经更改的 UIButton 标题颜色

java - 最低效的排序程序是什么?

php - 使用 PHP 过滤 API 响应

algorithm - 排序几乎有序的序列

ios - 如何在 Sprite 套件项目中设置初始场景?

swift - 当我可以做 if(var != null) 时,为什么可选值有用?

ios - SpriteKit 和 Swift,如果条件为真,则将平台设置为 nil 将不起作用

iPhone 4,录音后的音频电平问题

ios - 我可以将新的第 4 代 AppleTV 变成 iBeacon 吗?