如何编写一个以元组为参数的快速函数?

时间:2015-11-06 16:12:00

标签: sorting dictionary tuples swift2

使用Swift 2,我有一个类型为[String:String]的字典。现在我想使用sort方法,它需要一个例程如下:

mydict.sort(isOrderedBefore: ((String, String), (String, String)) -> Bool)

我假设type(String,String)的两个参数可以是我的字典的元素。因此我需要两件事:

  1. 具有请求类型的排序例程,它比较它作为参数获得的两个元组的第一个元素。我该如何写这个函数?我尝试了下面显示的版本和其他版本。所有产生的错误。

    fun mysort( (k1,v1):(String,String), (k2,v2):(String,String)) -> Bool {
    return k1 > k2
    

    }

  2. 编译器如何知道它必须从mydict中提取两个不同的元素?排序例程的调用将是:

    mydict.sort(mysort)
    
  3. 看起来很简单,但是......

1 个答案:

答案 0 :(得分:1)

let dict = [1:"beta",2:"cecil",3:"alfa"]

let sorted: Array<(Int,String)> = dict.sort { $0.1 < $1.1 } // sorted is an Array<(Int,String)>
print(dict)
// [2: "cecil", 3: "alfa", 1: "beta"]

sorted.forEach { (pair) -> () in
    print(pair.0,pair.1)
}
/*
3 alfa
1 beta
2 cecil
*/

let sortingClosureDescendingByVale = { (pair1:( Int, String), pair2:(Int, String)) -> Bool in
    pair2.1 < pair1.1
}

let sortedWithClosure = dict.sort(sortingClosureDescendingByVale)
print(sortedWithClosure) // as array of tuple [(2, "cecil"), (1, "beta"), (3, "alfa")]

sortedWithClosure.forEach { (pair) -> () in
    print(pair.0,pair.1)
}
/*
2 cecil
1 beta
3 alfa
*/

或者如果您愿意

let sortingClosureDescendingByVale = { (pair1:(key:Int, value:String), pair2:(key:Int, value:String)) -> Bool in
    pair2.value < pair1.value
}

第二个问题:你可以问一下关于排序数组......