Ангел обнови решението на 15.10.2014 17:03 (преди над 3 години)
+package main
+
+func Map(data []string, mapper func(string) string) (result []string) {
+ result = make([]string, len(data))
+ for index, value := range data {
+ result[index] = mapper(value)
+ }
+ return
+}
+
+func Filter(data []string, predicate func(string) bool) (result []string) {
+ result = make([]string, 0)
+ for _, value := range data {
+ if predicate(value) {
+ result = append(result, value)
+ }
+ }
+ return
+}
+
+func Reduce(data []string, combinator func(string, string) string) (result string) {
+ for _, value := range data {
+ result = combinator(result, value)
+ }
+ return
+}
+
+func Any(data []string, predicate func(string) bool) bool {
+ for _, value := range data {
+ if predicate(value) {
+ return true
+ }
+ }
+ return false
+}
+
+func All(data []string, predicate func(string) bool) bool {
+ for _, value := range data {
+ if !predicate(value) {
+ return false
+ }
+ }
+ return true
+}
Супер. Много добро решение.
Единствено мога да се заям за result = make([]string, 0)
. Изпълнява изискванията напълно, но дай да помислим дали има начин, каквото и да се подаде на Filter
, никога да не се налага на Go да преоразмерява масива под result
:)