Set는 List와 비슷하게 생겼지만 매우 다르다.
일단 선언하는 방법은 아래와 같다.
var numbers = {1, 2, 3, 4};
Set<int> numbers1 = {1, 2, 3, 4};
'중괄호'로 생성했음을 주의하자.
대괄호로 생성하면 List, 중괄호로 생성하면 Set이다.
물론, Set<int>이런 식으로 할 수도 있다.
List와 Set의 차이점은 '구성요소들이 unique하다'는 것이다.
아래 코드블럭 처럼...
numbers.add(1);
numbers.add(1);
numbers.add(1);
numbers.add(1);
numbers.add(1);
print(numbers);
Set인 numbers에 1을 여러번 추가해도, 출력하면 1은 한번밖에 나오지 않는다.
그러니까, '구성요소들이 딱 한개만 있어야 할 경우'에 Set을 사용한다.
*주의 할 것*
var OMG = {1, [1,2], [1,2]};
위 코드블럭 처럼 변수를 만들고 출력하면 어떻게 될까?
{1, [1,2]} 이렇게 나올까?
정답은 그렇지 않다. {1, [1, 2], [1, 2]} <- 이렇게 나온다.
왜 그럴까?
dart 공식 문서에 따르면... https://api.dart.dev/be/180360/dart-core/List/operator_equals.html
Lists are, by default, only equal to themselves. Even if other is also a list, the equality comparison does not compare the elements of the two lists.
그러니까, 핵심만 말하자면 두 번째 [1,2] 와 세 번째 [1,2] 는 다르다는 것이다.
즉, key에다가 list는 좀 지양해야 될 것 같다. value가 list라면 어차피 key로 value를 가져오는 것이 일반적이니까 상관 없을것 같은데...
물론, 구글링 해보면 패키지를 이용해서 list가 동일한건지 아닌지 비교하는 방법이 있기는 하다.
조금 더 자세한건, 'Dart - 2.1 Lists' 게시물을 참고하자.
https://want-to-work-life-balance.tistory.com/entry/Dart-21-Lists
'앱 만들기 프로젝트 > Dart' 카테고리의 다른 글
Dart - 3.1 Named Parameters (1) | 2024.10.14 |
---|---|
Dart - 3.0 Defining a Function (0) | 2024.10.14 |
Dart - 2.4 Maps (0) | 2023.03.07 |
Dart - 2.3 Collection For (0) | 2023.03.07 |
Dart - 2.2 String Interpolation (0) | 2023.03.07 |