通过比较字符串值swift对数组进行排序

时间:2018-05-25 14:11:25

标签: ios swift

我尝试通过比较两个项目的字符串值来对数组进行排序,该属性的值是一个数字,但类型为String。如何将它们转换为Int并检查哪个更大。目前的代码看起来像这样。

libraryAlbumTracks = tracks.sorted {
            $0.position!.compare($1.position!) == .orderedAscending
        }

但是像" 13"来之前" 2"因为它是一个字符串。我试图将值转换为Int,但因为它们是可选的,我得到operand ">" cannot be applied to type Int?的错误 请问如何在排序函数中解决这个问题?

2 个答案:

答案 0 :(得分:4)

使用numeric时提供compare选项。这将正确排序包含数字的字符串,如果某些字符串实际上没有数字或字符串具有数字和非数字的组合,它也会起作用。

libraryAlbumTracks = tracks.sorted {
    $0.position!.compare($1.position!, options: [ .numeric ]) == .orderedAscending
}

这样就无需将字符串转换为Int

注意:您还应该避免强制解包position。如果可以安全地强制拆开它们,或者安全地展开它们,或者在比较它们时使用??提供适当的默认值,要么不要使它们成为可选项。

答案 1 :(得分:1)

libraryAlbumTracks = tracks.sorted {
    guard let leftPosition = $0.position, 
          let leftInt = Int(leftPosition),
          let rightPosition = $1.position,
          let rightInt = Int(rightPosition) else { 
        return false 
    }
    return leftInt > rightInt
}