2014-06-15 58 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