본문 바로가기



Dart 13. 컬렉션 타입 List Set Map {유목민 알폰스}



테이블 처럼 행, 열이 있는 복잡한 형태의 데이터를 저장할수 있는 변수타입 입니다.

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