일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- crawler
- import
- ML
- List
- Flutter
- python
- text
- 코틀린
- 다트
- Android
- variable
- textstyle
- animation
- package
- Class
- 웹크롤러
- kotlin
- function
- 콜렉션
- map
- set
- Yocto
- 클래스
- pushnamed
- 크롤러
- Collection
- 함수
- 플러터
- DART
- 파이썬
- Today
- Total
조용한 담장
코틀린(Kotlin) Collections : Retrieving Collection Parts 본문
코틀린의 collection 의 Retrieving Collection Parts 에 대해 살펴보자.
원문 https://kotlinlang.org/docs/reference/collection-parts.html 을 보며 정리.
Slice
slice() 를 사용하여 지정된 위치의 element 로 새로운 list 를 구성한다.
range 나 위치를 표현하는 상수 값을 가진 collection 을 전달하여 위치값을 전달 할 수 있다.
val numbers = listOf("one", "two", "three", "four", "five", "six")
println(numbers.slice(1..3))
println(numbers.slice(0..4 step 2))
println(numbers.slice(setOf(3, 5, 0)))
// output:
// [two, three, four]
// [one, three, five]
// [four, six, one]
Take and drop
take() 를 사용하여 첫번째 element 부터 특정 개수만큼을 가져온다.
takeLast() 를 사용하면 마지막 element 부터 가져온다.
collection 의 크기보다 더 큰 개수를 요청하면 전체 collection 을 리턴한다.
drop() 을 사용하여 첫번째 element 부터 특정 개수를 제외하고 가져온다.
dropLast() 를 사용하면 마지막 element 부터 특정 개수를 제외하고 가져온다.
val numbers = listOf("one", "two", "three", "four", "five", "six")
println(numbers.take(3))
println(numbers.takeLast(3))
println(numbers.drop(1))
println(numbers.dropLast(5))
// output:
// [one, two, three]
// [four, five, six]
// [two, three, four, five, six]
// [one]
아래의 함수들을 사용하면 predicate 를 통해 take or drop 을 할 수 있다.
takeWhile() 는 predicate 와 매칭되는 않는 첫번째 결과와 그 이후의 element 들을 제외하고 가져온다. 첫번째 element 가 매칭되지 않으면 empty collection 이 리턴된다.
val chars = ('a'..'z').toList()
println(chars.takeWhile { it < 'f' })
println(chars.takeLastWhile { it > 'w' })
// output:
// [a, b, c, d, e]
// [x, y, z]
val numbers = listOf("one", "two", "three", "four", "five", "six")
println(numbers.takeWhile { !it.startsWith('f') })
println(numbers.takeWhile { !it.startsWith('o') })
// output:
// [one, two, three]
// []
takeLastWhile() 는 마지막 element 부터 predicate 와 매칭된 결과를 가져오며 마지막 element 가 매칭되지 않으면 empty collection 이 리턴된다.
dropWhile() 는 predicate 와 매칭된 첫번째 element 부터 마지막 element 까지들을 제외하고 가져온다.
dropLastWhile() 는 마지막 element 부터 predicate 와 매칭된 결과를 제외하고 가져온다.
val numbers = listOf("one", "two", "three", "four", "five", "six")
println(numbers.takeLastWhile { it != "three" })
println(numbers.dropWhile { it.length == 3 })
println(numbers.dropLastWhile { it.contains('i') })
// output:
// [four, five, six]
// [three, four, five, six]
// [one, two, three, four]
Chunked
chunked() 를 사용하여 collection 을 주어진 크기로 나눌 수 있다.
val numbers = (0..13).toList()
println(numbers.chunked(3))
// output:
// [[0, 1, 2], [3, 4, 5], [6, 7, 8], [9, 10, 11], [12, 13]]
람다 함수를 인자로 사용하여 transformation 을 적용할 수 있다.
val numbers = (0..13).toList()
println(numbers.chunked(3) { it.sum() }) // `it` is a chunk of the original collection
// output:
// [3, 12, 21, 30, 25]
Windowed
windowed() 를 collection 의 element 를 주어진 사이즈로 구성 가능한 모든 리스트를 얻는다.
sliding window 방식으로 결과를 구성한다.
val numbers = listOf("one", "two", "three", "four", "five")
println(numbers.windowed(3))
// output:
// [[one, two, three], [two, three, four], [three, four, five]]
step 은 윈도우의 첫번째 element 간의 거리를 지정한다. 기본은 1 이다.
partialWindows 는 윈도우 크기보다 작아 남게 되는 element 들을 결과에 포함한다.
val numbers = (1..10).toList()
println(numbers.windowed(3, step = 2))
println(numbers.windowed(3, step = 2, partialWindows = true))
println(numbers.windowed(3, step = 2) { it.sum() })
// output:
// [[1, 2, 3], [3, 4, 5], [5, 6, 7], [7, 8, 9]]
// [[1, 2, 3], [3, 4, 5], [5, 6, 7], [7, 8, 9], [9, 10]]
// [6, 12, 18, 24]
zipWithNext() 를 사용하면 인접한 두개의 element 를 Pair 로 가지는 List 를 생성한다.
각 Pair 두개의 element 를 사용하는 transformation function 을 사용할 수 있다.
val numbers = listOf("one", "two", "three", "four", "five")
println(numbers.zipWithNext())
println(numbers.zipWithNext() { s1, s2 -> s1.length > s2.length})
// output:
// [(one, two), (two, three), (three, four), (four, five)]
// [false, false, true, false]
'kotlin' 카테고리의 다른 글
코틀린(Kotlin) Collections : Ordering (0) | 2020.04.07 |
---|---|
코틀린(Kotlin) Collections : Retrieving Single Elements (0) | 2020.04.06 |
코틀린(Kotlin) Collections : plus and minus Operators, Grouping (0) | 2020.03.27 |
코틀린(Kotlin) Collections : Filtering (0) | 2020.03.24 |
코틀린(Kotlin) Collections : Transformations (0) | 2020.03.18 |