Иван обнови решението на 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. Опитай се да минеш без тази променлива :)
