函式式程式語言將函式作為第一等公民,也就是說,函式可以作為引數,也可以作為返回值。
將函式作為引數,或者返回值的特殊函式,就叫做高階函式。
下面介紹三個最基本的高階函式。分別是map,filter,reduce。
由於golang不支援范型,使用inte***ce{}+反射又顯得複雜,下面的例子只使用int型別進行演示。
func
(source [
]int
, fn func
(int
)int)[
]int
for_
, ele :=
range source
return result
}func
square
(x int
)int
func
main()
result :=
(source, square)
fmt.
println
(result)
//[1 4 9 16 25]
}
func
isodd
(x int
)bool
func
filter
(source [
]int
, fn func
(int
)bool)[
]int
for_
, ele :=
range source
}return result
}func
main()
result :=
filter
(source, isodd)
fmt.
println
(result)
//[2 4]
}
func
reduce
(source [
]int
, fn func
(x,y int
)int
, accumulate int
)int
return
reduce
(source[1:
], fn,
fn(source[0]
, accumulate))}
func
add(x, y int
)int
func
mul(x, y int
)int
func
main()
result :=
reduce
(source, add,0)
fmt.
println
(result)
// 15
result =
reduce
(source, mul,1)
fmt.
println
(result)
// 120
}
三種基本排序
由於排序不僅是針對主關鍵字,那麼對於次關鍵字,因為待排序的記錄序列中可能存在兩個或者兩個以上的關鍵字相等的記錄,排序結果可能會存在不唯一的情況,所以我們給出了穩定與不穩定排序的定義。假設ki kj 1 i n,1 j n,i j 且在排序前的序列中 ri 領先於 rj 即i j 如果在排序後仍然領先...
Elasticsearch 三種快取介紹
filter cache query cache query cache也稱為filter cache,顧名思義它的作用就是對乙個查詢中包含的過濾器執行結果進行快取。比如我們常用的term,terms,range過濾器都會在滿足某種條件後被快取,注意,這裡的bool過濾器是不會被快取的,但bool過...
三種「隨機」演算法介紹
本文主要介紹蒙特卡洛 monte carlo 演算法 拉斯維加斯 las vegas 演算法和舍伍德 sherwood 演算法。蒙特卡羅演算法並不是一種演算法的名稱,而是是一類隨機方法的統稱。這類方法的特點是,可以在隨機取樣上計算得到近似結果,隨著取樣的增多,得到的結果是正確結果的概率逐漸加大,但在...