如何对元组数组进行排序?

Fre*_*Lee 3 arrays sorting tuples swift

如何实现(或创建)一组元组列表的数组?
从我的代码中收集了以下内容.

基本上我创建了一个元组数组并通过for循环填充它; 之后我试着对它进行排序.

var myStringArray: (String,Int)[]? = nil
...

myStringArray += (kind,number)
...

myStringArray.sort{$0 > $1}
Run Code Online (Sandbox Code Playgroud)

这是我在构建之前给我的Xcode:

test.swift:57:9:'(String,Int)[]?' 没有名为'sort'的成员

dre*_*wag 11

你有两个问题.首先,myStringArray是一个Optional,你必须"解开"它,然后才能调用方法.其次,>元组没有运算符,你必须自己进行比较

if let myStringArray = myStringArray {
    myStringArray.sort { $0.0 == $1.0 ? $0.1 > $1.1 : $0.0 > $1.0 }
}
Run Code Online (Sandbox Code Playgroud)

  • 一个更相关的排序将首先按元组的第一个元素排序,然后在第一个元素相等的情况下按第二个排序.`myStringArray!.sort {$ 0.0 == $ 1.0?$ 0.1 <$ 1.1:$ 0.0 <$ 1.0}` (2认同)

Fre*_*Lee 6

实际上,我正在寻找的是具有最大整数值的元组:

var myStringArray: (String,Int)[]? = nil
...
println("myStringArray: \(myStringArray)\n")
myStringArray!.sort {$0.1 > $1.1}
println("myStringArray: \(myStringArray)\n")
...
Run Code Online (Sandbox Code Playgroud)

原版的:

myStringArray:[(One,1),(Square,1),(Square,4),(Square,9),(Square,16),(Square,25),(Prime,2),(Prime,3) ,(Prime,5),(Prime,7),(Prime,11),(Prime,13),(Fibonacci,1),(Fibonacci,1),(Fibonacci,2),(Fibonacci,3),( Fibonacci,5),(Fibonacci,8)]

排序方式:

myStringArray:[(Square,25),(Square,16),(Prime,13),(Prime,11),(Square,9),(Fibonacci,8),(Prime,7),(Prime,5) ,(Fibonacci,5),(Square,4),(Prime,3),(Fibonacci,3),(Prime,2),(Fibonacci,2),(One,1),(Square,1),( Fibonacci,1),(Fibonacci,1)]

...所以它是具有最大整数的"正方形":25.