Hello, Android!

배열의 정렬과 필터링 본문

Kotlin

배열의 정렬과 필터링

lwndnjs93 2020. 6. 28. 15:34

- 정렬 

코틀린에서 제공하는 배열의 요소를 정렬하는 함수들이 있다

크게 오름차순, 내림차순으로 정렬하는 함수와 

정렬 결과 배열을 반환하는 함수, 원본 배열을 정렬하는 함수가 있다

sortedArray() 함수는 오름차순으로 정렬한 결과를 반환한다

sortedArrayDescending() 함수는 내림차순으로 정렬한 결과를 반환한다

위 두 함수는 정렬 결과를 반환하기 때문에

정렬 대상 배열인 array1 의 요소는 변화가 없으니 아래와 같은 결과가 나온다

 

sort() 함수와 sortDescending() 함수는 정렬 대상인 배열에 대하여 정렬을 한다

sort(fromIndex, tooIndex) 함수는 오름차순 정렬을 진행한다

두개의 Int를 매개변수로 받으며, 첫번째 매개변수는 정렬 시작하는곳의 인덱스 번호

두번째 매개변수는 정렬이 끝나는 곳의 매개변수이다

만약 매개변수를 아예 안넣는 경우 배열 전체를 대상으로 정렬을 한다

array1.sort(1,4)의 경우 1번 인덱스에 있는 15부터 4번 인덱스인 5 까지만 정렬을 한다

sortDescending() 함수는 정렬 대상인 배열에 대하여 내림차순으로 정렬을 한다

 

 

- sortBy()

sortBy 함수는 람다식 한개를 받으며, 사용자가 만든 식에 맞게 정렬을 진행한다

위와 같은 경우 items 배열의 요소들의 길이에 따라 정렬을 하게 된다

이를 활용하여 데이터 클래스들을 저장하는 배열에 대한 정렬도 가능하다

이름과, 나이를 저장하는 데이터 클래스를 age를 기준으로 정렬하기 위해 

sortBy에 람다식으로 it.age를 넘겨주었다

 

- sortWith

sortwith는 comparator을 매개변수로 받으며, 이는 두개의 객체를 비교하는 compare함수를 구현한다

compare함수는 람다식을 받는다

두 객체의 age를 비교하여 ob1이 ob2보다 크면 1 같으면 0 그밖의 경우는 -1을 반환한다

 

만약 compareBy함수를 사용하게 된다면, 여러 조건을 적용한 정렬이 가능하다

첫번째로는 name 두번째에는 age를 기준으로 정렬하면

name을 기준으로 정렬하던중 우선 순위가 같은 경우 age를 기준으로 다시 비교한다

위의 경우 Neo와 New Friends!가 N으로 시작하여 순위가 같지만, 두번째 기준인 age의 경우

Neo가 9 이기 때문에 빠른 순서가 된다

- 필터링

배열에서 특정 요소만 필터링 하여 얻을때는 filter() 함수를 사용한다

filter 함수는 람다식으로 필터링 조건을 받는다

위의 경우 friends 배열에서 각 요소들의 age가 4보다 큰 경우만 걸러내게 된다

그리고 필터링 결과 배열을 sortedWith에서 age를 기준으로 다시 정렬을 하게 된다

'Kotlin' 카테고리의 다른 글

List  (0) 2020.07.05
문자열  (0) 2020.07.04
배열의 추가 잘라내기  (0) 2020.06.27
배열 arrayof, Array()  (0) 2020.06.21
reified타입  (0) 2020.06.14