mirror of
https://github.com/vlang/v.git
synced 2025-08-04 10:17:22 -04:00
arrays: add a partition function, that splits a given array, based on a criteria, passed as a callback fn (#19417)
This commit is contained in:
parent
5905f63e95
commit
04d28f2a74
@ -728,3 +728,18 @@ pub fn join_to_string[T](array []T, separator string, transform fn (elem T) stri
|
|||||||
}
|
}
|
||||||
return sb.str()
|
return sb.str()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// partition splits the original array into pair of lists,
|
||||||
|
// where first list contains elements for which predicate yielded true,
|
||||||
|
// while second list contains elements for which predicate yielded false
|
||||||
|
pub fn partition[T](array []T, predicate fn (elem T) bool) ([]T, []T) {
|
||||||
|
mut matching, mut non_matching := []T{}, []T{}
|
||||||
|
for item in array {
|
||||||
|
if predicate(item) {
|
||||||
|
matching << item
|
||||||
|
} else {
|
||||||
|
non_matching << item
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return matching, non_matching
|
||||||
|
}
|
||||||
|
@ -481,3 +481,20 @@ fn test_join_to_string() {
|
|||||||
return '1'
|
return '1'
|
||||||
}) == ''
|
}) == ''
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn test_partition() {
|
||||||
|
a := [1, 2, 3, 4, 5, 6, 7, 8]
|
||||||
|
lower, upper := partition(a, fn (it int) bool {
|
||||||
|
return it < 5
|
||||||
|
})
|
||||||
|
assert lower.len == 4
|
||||||
|
assert upper.len == 4
|
||||||
|
assert lower == [1, 2, 3, 4]
|
||||||
|
assert upper == [5, 6, 7, 8]
|
||||||
|
|
||||||
|
lower2, upper2 := partition(a, fn (it int) bool {
|
||||||
|
return it < 1
|
||||||
|
})
|
||||||
|
assert lower2.len == 0
|
||||||
|
assert upper2.len == 8
|
||||||
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user