Flutter/Dart

Dart 자료구조 리스트(List), 셋(Set), 맵(Map)

오늘도개발 2023. 4. 19. 14:57

1. List 선언

 

 -

var

name_list = ['a', 'b', 'c']; 와 같이 변수 타입을 컴파일러에 의해서 자동으로 설정할 수 있다.

 

 - List<String> name_list = ['a', 'b', 'c']; 와 같이 Java와 같이 리스트의 Type 을 지정할 수 있다.

 

 - List<String> name_list = <String>[]; 으로 선언만 하고 값은 나중에 입력 할 수 있다.

 

 

2. List 사용법

 

 - list num = [1, 2, 3]; num.add(3); 다음과 같이 add 메서드로 리스트에 데이터 값을 추가할 수 있다.

 

 - num.addAll( [4, 5, 6] ) 과 같이 addAll 로 리스트 값을 추가할 수 있다.

 

 - num[2]; 와 같이 Java의 배열과 유사하게 특정 인덱스의 값을 가져오거나 수정할 수 있다.  

 

     Ex> list num = [1, 2, 3];    num[1]; -> 2    num[1] = 4;  (num 리스트의 1번 인덱스의 값을 4로 수정)

 

 - num.remove(2) , num.removeAt(0) 와 같이 remove 로 특정한 데이터 값이나 removeAt 으로 특정위치의 값(인덱스)을 제거할 수 있다.

 

 - num.contains(3); 처럼 contains 로 리스트 내부에 해당값이 있는지 검색할 수 있다.

 

 - list num = [1, 2, 3]; num.length; 와 같이 length 로 리스트의 길이(데이터 갯수)를 확인 할 수 있다.

 

 - list 는 입력된 순서대로 저장되고 데이터의 위치가 그대로 유지된다.

 

void main(List<String> arguments) {
  
  var name_list = ['jhon', 'jack', 'beck'];

  // list 의 타입을 지정할 수 있다.
  List<String> name_list2 = ['jhon', 'jack', 'beck'];

  // 빈문자열 입력 후 나중에 값을 넣을 수 있다.
  List<String> name_list3 = <String>[];

  // 값 추가
  name_list3.add('jhon');
  name_list3.add('jack');

  name_list3.addAll(['a', 'b', 'c']);

  // 값 제거
  name_list3.remove('jack');

  name_list3.removeAt(1);

  // 값 검색
  name_list3.contains('c');
  
  // 데이터 갯수 확인
  name_list3.length;

}

 

3. Set 선언

 - var name_set = {'Jhon', 'Back'} 처럼 {} 로 타입 지정하지 않고 Set을 선언할 수 있다.

 

 - var name_set = <String>{}; 으로 초기화 없이 타입을 지정하여 선언할 수 있다.

 

 -  setJava 와 유사하게 타입 지정 선언을 할 수도 있다. Set<String> name_set = {};

 

4. Set 사용법

 

 - Set<String> name_set = {'Jhon', 'Back'}; name_set.add('Aka'); List 와 동일하게 add로 데이터를 추가할 수 있다. 

 

 - Set<String> name_set = {'Jhon', 'Back'}; name_set.length; 로 셋의 길이(데이터 갯수)를 확인 할 수 있다.

 

- name_set.addAll( { 'Roll', 'Tj' } ) 처럼 name_set.addAll 로 셋 데이터를 추가할 수 있다. 

 

- name_set.remove( 'Jhon' ) 처럼 name_set.remove로 데이터를 삭제 할 수 있다.

 

-  name_set.contains( 'Jhon' ) 처럼 name_set.contains 로 데이터를 검색 할 수 있다.

 

- list 는 입력된 순서가 유지되지 않고(특정 인덱스로 접근할 수 없음) 중복을 허용하지 않는다.

 

- 위치가 특정한 규칙에 의해서 정해져 있기 때문에 검색(접근) 속도가 List 보다 빠르다.

 

void main(List<String> arguments) {
  
  var name_set = {'jhon', 'jack', 'beck'};

  // set 의 타입을 지정할 수 있다.
  Set<String> name_set2 = {'jhon', 'jack', 'beck'};

  // 빈문자열 입력 후 나중에 값을 넣을 수 있다.
  Set<String> name_set3 = <String>{};

  // 값 추가
  name_set3.add('jhon');
  name_set3.add('jack');

  name_set3.addAll(['a', 'b', 'c']);

  // 값 제거
  name_set3.remove('jack');

  // 값 검색
  name_set3.contains('c');
  
  // 데이터 갯수 확인
  name_set3.length;

}

 

5. Map 선언

 

 - var student = { 'Jhon' : 13, 'Jack' : 15}; 와 같이 Key 와 value 로 값을 선언 및 초기화 할 수 잇다.

 

 - var student = Map<String,int>(); 처럼 Java 와 유사한 방식으로 타입을 지정한 선언을 할 수 있다.

 

 - type으로 들어오는 값이 서로 다를 때는 dynamic 이라고 타입을 선언하면 된다.

 

     Ex> Map<String,dynamic> = { 'name' : 'Jhon', 'age' : 34 }

 

6. Map 사용법

 

- student['Jhon'] 으로 해당 Key 의 데이터 값을 꺼낼 수 있다.

 

 - student.containsKey('Jhon')  처럼 해당 Key를 가지고 있는 지 검색할 수 있다.

 

 - student.keys; 로 해당 Map 이 가지고 있는 모든 Key 값을 가져올 수 있다.

 

 - student.length; 로 Map 의 데이터 갯수를 알 수 있다.

 

 - student.values; 로 Map 이 가지고 있는 모든 Value 값을 가져올 수 있다.

 

 - Key 값은 중복되면 안된다.

 

void main(List<String> arguments) {
  
  var student = {'Jhon': 13, 'Jack': 15};

  var student2 = Map<String, int>();

  Map<String, dynamic> student3 = {'이름': 'Jhone', '나이': 13, '닉네임': 'jjj'};

  // key 'jhon' 의 값을 불러옴 13
  student['Jhon'];

  // key 'jhon' 을 가지고 있는지 확인 true
  student.containsKey('Jhon');

  //가지고 잇는 key 목록 ['Jhon', 'Jack']
  student.keys;

  //가지고 잇는 value 목록 [13, 15]
  student.values;

  // 데이터의 갯수
  student.length;

}