mirror of https://github.com/k3s-io/k3s
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
58 lines
1.9 KiB
58 lines
1.9 KiB
package govalidator |
|
|
|
// Iterator is the function that accepts element of slice/array and its index |
|
type Iterator func(interface{}, int) |
|
|
|
// ResultIterator is the function that accepts element of slice/array and its index and returns any result |
|
type ResultIterator func(interface{}, int) interface{} |
|
|
|
// ConditionIterator is the function that accepts element of slice/array and its index and returns boolean |
|
type ConditionIterator func(interface{}, int) bool |
|
|
|
// Each iterates over the slice and apply Iterator to every item |
|
func Each(array []interface{}, iterator Iterator) { |
|
for index, data := range array { |
|
iterator(data, index) |
|
} |
|
} |
|
|
|
// Map iterates over the slice and apply ResultIterator to every item. Returns new slice as a result. |
|
func Map(array []interface{}, iterator ResultIterator) []interface{} { |
|
var result = make([]interface{}, len(array)) |
|
for index, data := range array { |
|
result[index] = iterator(data, index) |
|
} |
|
return result |
|
} |
|
|
|
// Find iterates over the slice and apply ConditionIterator to every item. Returns first item that meet ConditionIterator or nil otherwise. |
|
func Find(array []interface{}, iterator ConditionIterator) interface{} { |
|
for index, data := range array { |
|
if iterator(data, index) { |
|
return data |
|
} |
|
} |
|
return nil |
|
} |
|
|
|
// Filter iterates over the slice and apply ConditionIterator to every item. Returns new slice. |
|
func Filter(array []interface{}, iterator ConditionIterator) []interface{} { |
|
var result = make([]interface{}, 0) |
|
for index, data := range array { |
|
if iterator(data, index) { |
|
result = append(result, data) |
|
} |
|
} |
|
return result |
|
} |
|
|
|
// Count iterates over the slice and apply ConditionIterator to every item. Returns count of items that meets ConditionIterator. |
|
func Count(array []interface{}, iterator ConditionIterator) int { |
|
count := 0 |
|
for index, data := range array { |
|
if iterator(data, index) { |
|
count = count + 1 |
|
} |
|
} |
|
return count |
|
}
|
|
|