컬렉션들에 확장함수들을 잘 활용하면 원하는 값을 빠르게 얻을 수 있다. [참고블로그]
Filter [공식문서]
# 1~10 까지의 수에서 합이 10이 되는 조합이 몇 종류인지 구해본다.
(1..10).filter{ 10 - it <= 10 } // output: [1, 2, 3, 4, 5]
fun main() {
var a = (1..10/2).filter{ 10 - it <= 10 }.count()
var b = (1..10/2).filter{ 10 - it <= 10 }
var c = (1..10/2).filter{ 10 - it <= 10 }.size
println(a)
println(b)
print(c)
}
//5
//[1, 2, 3, 4, 5]
//5
pop 이나 for반복문을 통해서 조건에 만족하는 수의 조합 수를 구할 수는 있지만, 시간이 오래 걸린다.
filter함수는 이러한 부분을 원할하게 필터링 해준다.
filter는 Collections에서 원하는 형태로 필터링해주는 함수라고 느껴진다.
val numbers = listOf("one", "two", "three", "four")
val longerThan3 = numbers.filter { it.length > 3 }
println(longerThan3)
// output: [three, four]
Partition [공식문서]
val numbers = listOf("one", "two", "three", "four")
val (match, rest) = numbers.partition { it.length > 3 }
println(match)
println(rest)
//[three, four]
//[one, two]
파티션의 경우 filter처럼 조건을 붙여서 원하는 값들의 집합과 속하지 않는 집합을 걸러서 두 집합으로 구분해준다.
Take
Collection의 앞 혹은 뒤에서부터 얼마만큼의 원소를 가지고 새로운 List를 만들 것인지 결정하는 확장함수이다.
var a = (0..10).toList().take(3)
print(a)
// [0, 1, 2]
val chars = ('a'..'z').toList()
println(chars.take(3)) // [a, b, c]
println(chars.takeWhile { it < 'f' }) // [a, b, c, d, e]
println(chars.takeLast(2)) // [y, z]
println(chars.takeLastWhile { it > 'w' }) // [x, y, z]
Takewhile 은 조건 전까지의 반복하여 맞는 것을 가져온다.
TakeLast 는 take의 반대방향으로 작동한다.
TakeLastWhile도 마찬가지다.
728x90
반응형
'Algorithm > Kotlin' 카테고리의 다른 글
sum() sumBy() (0) | 2021.11.02 |
---|---|
Kotlin Data Structure (0) | 2021.10.24 |
emptyList() (0) | 2021.08.05 |