2014-06-15 61 views
3

如何實現(或創建)元組列表的數組排序?
以下是從我的代碼中收集到的。

本質上,我創建了一個元組數組 並通過for循環填充它;之後我試圖對其進行分類。如何排序元組數組?

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

myStringArray += (kind,number) 
... 

myStringArray.sort{$0 > $1} 

這是Xcode中給了我,我才建:

test.swift:57:9: '?(字符串,整數)[]'沒有會員姓名 '排序'

回答

10

您有兩個問題。首先,myStringArrayOptional,你必須「解開」它,然後才能調用它的方法。其次,沒有>運營商的元組,你必須做你自己

if myStringArray { 
    myStringArray!.sort { $0.0 == $1.0 ? $0.1 > $1.1 : $0.0 > $1.0 } 
} 
+2

更相關的排序將首先按照元組的第一個元素進行排序,然後在第一個元素相同的情況下按第二個元素進行排序。 'myStringArray!.sort {$ 0.0 == $ 1.0? $ 0.1 <$ 1.1:$ 0.0 <$ 1.0}' – noliv

+0

@noliv雅好點。我更新了我的答案 – drewag

6

其實,我一直在尋找的比較,是最大的整數值的元組:

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

原文:

myStringArray:[(一,1),(廣場,1),(方形,4),(方形,9), (方形,16), (Prime,2),(Prime,3),(Prime,5), (Prime,7),(Prime,11),(Prime,13),(Fibonacci,1),斐波那契,1), (斐波那契,2),(斐波那契,3),(斐波那契,5),(斐波那契,8)]

排列:

myStringArray: (Square,25),(Square,16),(Prime,13),(Prime,11), (Square,9),(Fibonacci,8) Fibonacci,5), (Square,4),(Prime,3),(Fibonacci,3),(Prime,2),(Fibonacci,2), (其中,1),(廣場,1),(斐波那契,1),(斐波那契數,1)]

...所以它的 「廣場」 具有最大整數:25