테이블 처럼 행, 열이 있는 복잡한 형태의 데이터를 저장할수 있는 변수타입 입니다.
List, Set, Map 타입에 대해서 알아 보겠습니다.
1. List 타입
- List<String> 꺽쇠 안에 타입을 선언하면 배열안에 들어갈수 있는 타입이 지정이 됩니다.
- List 꺽쇠와 타입지정이 없기 때문에 배열안에 들어갈 타입은 다이나믹 타입이 됩니다. 그래서 모든 타입의 변수를 담을수 있습니다.
[실행]
void main() {
List rs = [123, "테스트", true];
rs[0] = 100;
rs[1] = "홍길동";
print('rs:[${rs[0]}, ${rs[1]}, ${rs[2]}]');
}
[결과]
rs:[100, 홍길동, true]
제네릭으로 타입을 지정했다면 지정한 타입만 대입할수 있습니다.
void main() {
List<String> rs = ["하나", "두울", "세엣"];
rs[0] = 500;
}
List 요소 추가 삭제
void main() {
List<String> rs = ["하나", "두울", "세엣"];
rs.add("네엣");//---추가합니다.
rs.add("다섯");//---추가합니다.
rs.removeAt(0);//<--- 0번째 요소를 삭제합니다.
print(rs.toString());//List출력
}
[두울, 세엣, 네엣, 다섯]
List 추가될 요소의 사이즈를 고정으로 지정할때
void main() {
var rs = List<String>.filled(5, "A") ;
print("=======초기값======");
print(rs.toString());
rs[0] = "하나";
rs[2] = "두울";
rs[3] = "세엣";
rs[4] = "네엣";
print("=======업데이트후======");
print(rs.toString());//List출력
}
[결과]
=======초기값======
[A, A, A, A, A]
=======업데이트후======
[하나, A, 두울, 세엣, 네엣]
void main() {
var rs = List<String>.filled(5, "A") ;
print("=======초기값======");
print(rs.toString());
rs[0] = "하나";
rs[2] = "두울";
rs[3] = "세엣";
rs[4] = "네엣";
print("=======업데이트후======");
print(rs.toString());//List출력
}
사이즈가 5입니다. 5개까지 요소를 사용할수 있고 add메소는는 아예 사용자체가 안되도록 막려있습니다.
만약 이렇게 7번째 요소를 엑세스하려고 하면 에러가 납니다. 즉 5개 고정으로 잡아놓고 5개의 저장공간안에서 사용하도록 강하게 지정해 놓은 상태가 됩니다.
리스트 확장 가능하게 옵션을 지정해서 선언
main(){
var rs = List<int>.filled(3, 0, growable:true);
print(rs);
rs[0] = 10;
rs[0] = 20;
rs[0] = 30;
print(rs);
rs.add(40);
print(rs);
}
[ 결과 ]
[0, 0, 0]
[30, 0, 0]
[30, 0, 0, 40]
특정 로직으로 리스트 초기화
main(){
var rs = List<int>.generate(3, (index) => index * 10, growable:true);
}
[ 결과 ]
[0, 10, 20]
2. Set 타입
- Set은 List와 사용법이 비슷하지만 중복데이터를 허용하지 않습니다.
- Set은집합 함수를 제공합니다.{ union 합집합, intersection 교집합, difference차집합 }
- Set은 요소에 접근하려면 List로 변환후 접근해야 하기때문에 불편한 부분이 있습니다.
[ 하위 요소에 접근 ]
Set<int> s2 = {1, 3, 5};
List<int> list = s2.toList();
print(list[0]); // 0번째 요소에 접근
출력)
1
Set의 수학함수 합집합, 차집합, 교집합
Dart에서 Set은 union, intersection, 그리고 difference 메서드를 제공하여 합집합, 교집합, 차집합을 쉽게 구할 수 있습니다. 아래에 각각에 대한 예제 코드를 작성해봤습니다.
1. Union (합집합) : 두 Set의 모든 요소를 합친 새로운 Set을 반환합니다.
Set<int> s1 = {1, 2, 3};
Set<int> s2 = {3, 4, 5};
Set<int> union = s1.union(s2);
print(union); // 출력: {1, 2, 3, 4, 5}
2. Union (합집합) : 두 Set의 모든 요소를 합친 새로운 Set을 반환합니다.
Set<int> s1 = {1, 2, 3};
Set<int> s2 = {3, 4, 5};
Set<int> intersection = s1.intersection(s2);
print(intersection); // 출력: {3}
3. Difference (차집합) : 첫 번째 Set에서 두 번째 Set의 요소를 제외한 새로운 Set을 반환합니다.
Set<int> s1 = {1, 2, 3};
Set<int> s2 = {3, 4, 5};
Set<int> difference = s1.difference(s2);
print(difference); // 출력: {1, 2}
3. Map타입
Map타입의 키와 값을 한쌍으로 해서 키를 통해서 값에 접근할수 있습니다.
// Map 생성
Map<String, int> map = {
'apple': 5,
'banana': 3,
'orange': 4
};
// 값 읽기
print(map['apple']); // 출력: 5
// 값 변경
map['apple'] = 7;
print(map['apple']); // 출력: 7
// 새로운 키-값 쌍 추가
map['grape'] = 6;
print(map); // 출력: {apple: 7, banana: 3, orange: 4, grape: 6}
// 키-값 쌍 삭제
map.remove('banana');
print(map); // 출력: {apple: 7, orange: 4, grape: 6}
// 모든 키-값 쌍에 대한 작업 수행
map.forEach((key, value) {
print('Key: $key, Value: $value');
});
// 출력:
// Key: apple, Value: 7
// Key: orange, Value: 4
// Key: grape, Value: 6
By. 유목민 알폰스 - Nomadic Alphonse
'Dart' 카테고리의 다른 글
Dart 15. 함수와 제어문 {유목민 알폰스} (2) | 2023.11.07 |
---|---|
Dart 14. 널 안전성 변수선언 {유목민 알폰스} (1) | 2023.11.07 |
Dart 12. { const, final }와 { var, dynamic } 타입 {유목민 알폰스} (1) | 2023.11.05 |
Dart 11. 데이터 타입 [String, int, double] Type 사용 (1) | 2023.11.05 |
Dart 11. DART에서 private변수 선언 {유목민 알폰스} (1) | 2023.11.04 |