swift版本:
Apple Swift version 2.1 (swiftlang-700.1.101.6 clang-700.1.76)
Target: x86_64-apple-darwin14.5.0
Array類的filter方法用于篩選,其定義是:filter(includeElement: (T) -> Bool) -> T[]
傳入的參數(shù)是一個閉包。當你在調(diào)用filter的時候,實際上是通過傳入的這個includeElement去訪問了Array內(nèi)部的變量,并做相應(yīng)的處理。
先看一個簡單的例子。
var strTest:[String] = [String]()
for i in 0..<1000000 {
strTest.append("A\(i)")
}
print(strTest.filter({$0 == "A50"})[0]) //A50
$0代表傳入的元素本身,而不是下標。返回的是一個數(shù)組,所以取具體值時需要給下標。上面這段代碼看上去很無聊,都已經(jīng)知道結(jié)果了,還篩選個毛線啊。那換一段。
var strTest:[(Int, String)] = [(Int, String)]()
for i in 0..<1000000 {
strTest.append((i, "A\(i)"))
}
print(strTest.filter({$0.0 == 250})[0].1) //A250
$0.0代表傳入的元組的第一個值,如果元組被命名過了,則可以直接帶名字。
filter實際上也是在做循環(huán)遍歷,把斷點打到filter這句話上,斷點會反復中斷。
下面比較一下效率。
let before = Int64(NSDate().timeIntervalSince1970*1000)
let target = strTest.filter({$0.0 == 250})[0].1
print(target)
print(Int64(NSDate().timeIntervalSince1970*1000) - before) //582
let before = Int64(NSDate().timeIntervalSince1970*1000)
var target:String = ""
for i in 0..<1000000 {
if strTest[i].0 == 250 {
target = strTest[i].1
}
}
print(target)
print(Int64(NSDate().timeIntervalSince1970*1000) - before) //133
所以,今天你花了幾分鐘時間,學會了一種炫酷難讀執(zhí)行效率低的技術(shù)╮(╯▽╰)╭