let numberSet = Set(1...11)
let divideSet = numberSet.map({ $0 / 10 })
//Error: Set does not have a member named map :(
Run Code Online (Sandbox Code Playgroud)
Swift 1.2支持Set()无序集合,但map(_:)似乎不适用于集合,所以我决定在我的操场上变聪明并尝试:
let stringSet = Set(map(numberSet, { String($0)}))
println(stringSet)
stringSet = ["2", "11", "1", "8", "6", "4", "3", "9", "7", "10", "5]
Run Code Online (Sandbox Code Playgroud)
这似乎有效.所以我尝试扩展Set:
extension Set {
func map<U>(transform: (T) -> U) -> Set<U> {
return Set(Swift.map(self, transform)) }
}
Error: "couldn't find initialiser for Set(T) that accepts argument of type U"
Run Code Online (Sandbox Code Playgroud)
我认为它有一个很好的理由,它不起作用,就像这个例子:
let smarDividSet …Run Code Online (Sandbox Code Playgroud) 尝试扩展Array类型以使用二进制排序按顺序插入元素.这是我的游乐场代码:
extension Array {
func insertionIndexOf(elem: T , isOrderedBefore: (T, T) -> Bool) -> Int {
var lo = 0
var hi = self.count - 1
while lo <= hi {
let mid = (lo + hi)/2
if isOrderedBefore(self[mid], elem) {
lo = mid + 1
} else if isOrderedBefore(elem, self[mid]) {
hi = mid - 1
} else {
return mid
}
}
return 0
}
mutating func insertOrdered(elem: T){
let index = self.insertionIndexOf(elem, isOrderedBefore: { (a , b) …Run Code Online (Sandbox Code Playgroud)