Иван обнови решението на 15.10.2014 13:37 (преди над 3 години)
+package main
+
+func Filter(data []string, predicate func(string) bool) []string {
+ result := make([]string, 5, 10)
+ for _, i := range data {
+ if predicate(i) {
+ result = append(result, i)
+ }
+ }
+ return result
+}
+
+func Map(data []string, mapper func(string) string) []string {
+ result := make([]string, 5, 10)
+ for _, i := range data {
+ result = append(result, mapper(i))
+ }
+ return result
+}
+
+func Reduce(data []string, combinator func(string, string) string) string {
+ result := data[0]
+ for i := 1; i < len(data); i++ {
+ result = combinator(result, data[i])
+ }
+ return result
+}
+
+func Any(data []string, predicate func(string) bool) bool {
+ result := false
+ for _, i := range data {
+ if predicate(i) {
+ result = true
+ break
+ }
+ }
+ return result
+}
+
+func All(data []string, predicate func(string) bool) bool {
+ return !Any(data, func(s string) bool {
+ return !predicate(s)
+ })
+}
Какво ще има в s след долните два реда?
s := make([]string, 5, 10)
s = append(s, "foo")
Как ще се държи твоят Reduce
, ако му се подаде празна колекция?
Имплементацията на Any
изглежда коректна, но аз твърдя, че не искаш да си пазиш result
. Опитай се да минеш без тази променлива :)