코틀린 언어 정리 4-7
Collection operations
Common operations( 일반적인 연산들 )
Retrieving Collection Parts
컬렉션의 일부를 검색 또는 단순 그룹화하여 새로운 컬렉션을 생성 하는 방법들을 제공합니다. 검색에는 slice, take, drop등이 있고 그룹화에는 chunked, windowed 등의 연산이 있습니다.
Slice
입력된 영역(range) 또는 정수를 인덱스로 컬렉션의 요소를 참조하여 새로운 콜렉션을 생성합니다.
예제
Take and drop
기본적으로는 컬렉션의 처음 요소, 또는 마지막 요소부터, 입력된 숫자(개수)만큼, 새로운 컬렉션으로 가져오거나(take, takeLast), 버린 후 나머지를 가져옵니다.(drop, dropLast). 단순히 개수만 입력받지 않고 조건을 람다함수로 입력하여 가져올 수도 있습니다.(takeWhile, takeLastWhile, dropWhile, dropLastWhile) 주의할 점은 입력된 조건을 만족하는 데이터를 모두 가져오는 검색이 아니라 조건을 만족하는 동안 다음 요소로 이동하는 continue 조건이라는 점 입니다.
연산들
take, takeLast, drop, dropLast, takeWhile, takeLastWhile, dropWhile, dropLastWhile
예제
예제
Chunked
chunked는 컬렉션의 요소들을 입력된 개수 만큼 그룹화한 컬렉션을 생성합니다. 각각의 그룹화에 포함되는 요소는 서로 중복되지 않습니다.
함수 형식
fun <T> Iterable<T>.chunked(size: Int): List<List<T>>
fun <T, R> Iterable<T>.chunked(size: Int, transform: (List<T>)->R): List<R>
size: 그룹화할 개수
transform: 그룹화한 리스트를 변환할 수 있는 함수
예제
chunked의 결과: [[0, 1, 2], [3, 4, 5], [6, 7, 8], [9, 10, 11], [12, 13]]
windowed의 결과: [[0, 1, 2], [1, 2, 3], [2, 3, 4], [3, 4, 5], [4, 5, 6], [5, 6, 7], [6, 7, 8], [7, 8, 9], [8, 9, 10], [9, 10, 11], [10, 11, 12], [11, 12, 13]]
windowed는 chunked의 개념을 포함할 정도로 일반적이지만 기본적으로 사용하면 이와 같은 차이가 있습니다.
Windowed
컬렉션의 모든 요소들에 대해, 현재 요소를 포함하여 입력된 숫자만큼 다음 요소들을 그룹화 한 컬렉션을 생성합니다. chunked와의 차이점은 그룹화 할 요소들이 서로 중복되거나, 중복되지 않게 또는 건너뛰게 설정하는 것이 가능하다는 점입니다. chunked보다 일반화된 기능을 제공합니다.
함수 형식
fun <T> Iterable<T>.windowed(size: Int, step: Int = 1, partialWindows: Boolean = false): List<List<T>>
fun <T, R> Iterable<T>.windowed(size: Int, step: Int = 1, partialWindows: Boolean = false, transform: (List<T>) -> R): List<R>
size: 그룹화할 요소 개수
step: 그룹화를 시작할 다음 요소까지의 index 차이
partialWindows: 전체 요소의 개수가 그룹화할 개수와 일치하지 않는 경우 마지막 부분에서는 그룹화 할 개수보다 적은 수의 요소들이 남을 수 있는데, 이 나머지 요소들을 그룹화 시킬 것인지 버릴 것인지를 결정할 수 있습니다.(false: 버림, true: 그룹화)
transform: 그룹화된 각각의 리스트에 변환 연산을 적용할 수 있습니다.
유사함수
fun <T> Iterable<T>.zipWithNext(): List<Pair<T, T>>
inline fun <T, R> Iterable<T>.zipWithNext(transform: (s1: T, s2: T) -> R): List<R>
기본동작으로는 현재 요소와 다음 요소로 Pair 객체를 생성한 후 새로운 컬렉션의 요소로 추가합니다. 마지막 요소 전까지 연산을 적용하고 마지막 요소에 대해서는 그 다음 요소가 없으므로 연산을 적용하지 않습니다. zipWithNext연산에서 transform도 지원하므로 기본적으로 생성되는 Pair에 대해 변환 연산을 적용할 수 있으므로 Pair가 아닌 전혀 다른 형식으로 저장할 수도 있습니다.
예제
'코틀린( Kotlin )' 카테고리의 다른 글
코틀린 4-9 Collection operations - Collection Ordering( 컬렉션 정렬 ) (0) | 2020.04.13 |
---|---|
코틀린 4-8 Collection operations - Retrieving Single Elements( 단일 요소 검색 ) (0) | 2020.04.13 |
코틀린 4-6 Collection operations - Grouping (0) | 2020.04.12 |
코틀린 4-5 Collection operations - Plus and Minus Operators (0) | 2020.04.12 |
코틀린 4-4 Collection operations - Filtering (0) | 2020.04.12 |