달달한 스토리

728x90
반응형

 

flutter 공부 한창이다.

 

오늘 사용한 함수는 sort라는 함수이다.

 

보통 List 함수에 있는 리스트의 여러 인자들을 오름차순이나 내림차순으로

 

정렬하기 위해 사용된다. 

 

기본 적인 사용 방법을 보자.

 


사용법

 

int type 오름차순

void main(){
	List<int> numbers = [400, 59, 13, 7264];
    numbers.sort();
    print(numbers);
}

numbers라는 배열에다가

 

그냥 

 

sort() 함수를 사용하면,

 

작은 인자부터 큰 인자까지

 

배열을 바꾸어 준다.

 

//numbers = [13, 59, 400, 7264];

 

그러면 반대로 내림차순을 알아보자.

 

int type 내림차순

 

void main(){
	List<int> numbers = [400, 59, 13, 7264];
    numbers.sort();
    print(numbers.reversed);
}

간단하다. numbers에다가

 

reversed 함수를 붙여주면 된다.

 

//numbers = [7264, 400, 59, 13];

 

그렇다면 문자열의 나열은 어떨까?

 

void main(){
	List<String> names = ['Max', 'Edgar', 'Sara', 'Peter'];
    names.sort((a, b) => a.length.compareTo(b.length));
    print(names);
}

여기서는 조금 어려울 수도 있겠다.

 

사실 나도 많이 어렵다.

 

다음 예시를 먼저 보자.

 

우선 compareTo() 함수는 값을 비교해주는 함수이다.

 

예시

 

print(1.compareTo(2));  // => -1

print(2.compareTo(1));  // => 1

print(1.compareTo(1));  // => 0

 

반환값은 0보다 작거나, 0이거나, 0보다 커야 되며 해당 값을 기준으로 정렬한다.

 

문자열 같은 경우는 서로 문자열의 길이를 비교했을 때,

 

값이 차이가 많이 나는 문자열부터 정렬해준다. (Max의 길이가 제일 짧다. 고로 차이가 제일 큼).

 

쉽게 말해, 문자열이 제일 짧은 것부터 오름차순 정렬을 해준다.

 

내림차순은 int type을 사용할 때와 마찬가지이다.

 

고로, 위에 코드를 출력하면,

 

// names = [Max, Sara, Edgar, Peter];

 

가 출력된다.

 

이번에는 좀 더 복잡하게 가보자.

 

Friend 모델 클래스와 Friend 타입의 리스트를 만들어 주겠다.

 

void main(){
	List<Friend> myFriends = [
    Friend(name: 'Minsoo', age: 18),
    Friend(name: 'Heejin', age: 25),
    Friend(name: 'Sooyeol', age: 32),
    Friend(name: 'Jonghyeon', age: 22),
    ];
    
    myFriends.sort((a, b) => a.age.compareTo(b.age));
    print(myFriends);
}

class Friend {
	String name;
    int age;
    
    Friend({this.name, this.age});
}

이런 식으로 입력을 했을 때,

 

프린트에 값은 무엇이 나올까?

 

값을 살펴보자.

 

위에 문자열처럼 임의로 정의된 a, b라는 인자에서(Friend객체)

 

age값을 비교해서 정렬해달라는 의미이다.

 

// myFriends.sort((a, b) => a.age.compareTo(b.age));

 

이제는 값이 예측이 될 것이다.

 

무조건 이 방식으로 쓰면 오름차순으로 정렬이 된다.

 

// myFriends = [Minsoo, Jonghyeon, Heejin, Sooyeol];

 

여기까지 List.sort()에 대해서 알아보았다.

 

아 그리고 하나 더 말하자면, sort는 void타입이기 때문에

 

값을 반환하지 않는다.

 

한마디로 

 

// var sortedValue = myFriends.sort((a, b) => a.age.compareTo(b.age));

 

이런 식으로 값을 담으면 컴파일에러가 발생한다.

 

하지만 방법은 있다.

 

바로 Cascade Notation(..)이다.

 

이건 추후에 공부하고 설명하겠다.

 

간단하게 설명하면, 

 

동일한 객체에 대해 일련의 작업을 수행할 수 있게 도와준다.

 

사용하는 이유는 임시 변수를 만드는 단계를 생략하여 더 많은 유동적인 코드를 쓸 수 있다는 점이다.

 

아래는 예시이다.

 

예제 출처는 아래에 남겨 둔다.

 

https://m.blog.naver.com/chandong83/222051986313

 

플러터(Flutter) - ".." 구문(Syntax)에 대해서(Cascade noation) ".."는 연산자(Operator)가 아니다.

플러터 코드들을 보면 ".." 이 사용된 코드들을 종종 볼 수 있었다. 해당 기호는 캐스케이드(..)...

blog.naver.com

 

var sb = StringBuffer();
var returnWrite = sb.write('foo');  
returnWrite.write('bar'); 



//위에 함수를 Cascade Notation으로 바꾸게 되면,


var sb = StringBuffer()
           ..write('foo')
           ..write('bar');
           
           //한 층더 간결하게 표현이 가능하다.

이런식으로 일련의 작업을 할 때 새로운 변수를 생성하지 않고,

 

연속된 작업을 할 수 있게 도와준다.

 

이 방법을 왜 설명했냐면,

 

// var sortedValue = myFriends..sort((a, b) => a.age.compareTo(b.age));

 

sort앞에 Cascade Notation을 붙이면 반환 값을 변수에 담을 수가 있기 때문이다.

 

여기까지 sort에 대한 내용을 정리해보았다.

 

내일도 빡코딩 해보자 파이팅!!

728x90
반응형

공유하기

facebook twitter kakaoTalk kakaostory naver band
loading