본문 바로가기

study/dart

Dart_(7) Built-in types(2) <Collections>

2. Collections

(1) List

void main(){
  var animals = ['rabbit', 'dog', 'cat', 'wolf'];
  List<int> age = [5, 2, 4, 12];
  animals.add('rat');
}

 

가급적 var 로 선언한다. (하지만 class를 다룰 때에는 type을 명시하는 것이 좋은 방법이다.)

 

(2) Set

Set 은 python의 Set과 거의 비슷하다.

 

void main(){
  Set<int> price = {5000, 2000, 1000, 1000, 1000, 1000,};
  price.add(2000);
  price.add(2000);
  price.add(2000);
  price.add(2000);
  print(price); // {5000, 2000, 1000}
}

 

SetList와 유사하지만 각 요소가 Unique(같은 값을 중복해서 갖지 않는다) 하다는 특징을 갖고 있다.

 

 

(3) Map

Map 은 python 의 Dictionary 와 같은 것이다.

void main(){
  var summoner = {
    'username' = 'trollbat',
    'xp' = 99.9,
    'flash' = true,
  };
}

 

summoner의 자료형은 Map이다 그런데 더 자세히 보면

Map<String, Object> 타입인 것을 알 수 있다.

이는 summonerkeyvalue에 대한 자료형까지 나타내고 있다.

그렇다면 Map을 선언할 때 key, value의 자료형을 지정해줄 수 있다.

void main(){
  Map<Int, String>  user = {
    1 = 'trollbat',
    2 = 'shacotime',
    3 = 'sinmat',
  };
}

 


그리고 심지어 이런 것까지 가능하다.

void main(){
  Map<List<int>, bool>  prime_num = {
    [1, 2, 3, 5] = true,
    [2, 5, 7] = true,
    [12, 13, 15] = false,
  };
}

 

이런것도 가능한데 굳이 할 일이 있나 싶긴 하다.

List<Map<String, object>>


(4) Collection if / Collection for

Collection if / Collection for 는 

"collection if"와 "collection for" 구문은 컬렉션 내에서 조건부 생성과 반복 생성을 가능하게 해주는 기능으로

리스트(List), 세트(Set), 맵(Map)과 같은 컬렉션의 생성과 조작을 더 유연하고 간결하게 만들어준다.

 

 

'python 의 comprehension과 같은 기능이다.'

 

void main(){
  var animals = ['rabbit', 'dog', 'cat', 'wolf'];
  var egg_hatch = true;
  
  if (egg_hatch){
    animals.add('chicken');
  }

  var name = ['rarabi', 'puppypuppy', 'cheese', 'grey', if(egg_hatch) 'fried'];
  
  print(animals);
  print(name);
}

 

위의 예시를 설명하여 Collection if 를 알아보자.

 

더보기

이해를 돕기 위해 스토리를 만들어 설명해본다.

 

우리집에 살고 있는 동물들을 모아 리스트를 만들었고 그 동물들의 이름에 대한 리스트를 만들었다.

(토끼, 강아지, 고양이, 늑대) / (라라비, 퍼피퍼피, 치즈, 그레이)

 

그리고 이번에 옆집에서 달걀을 가져왔다.

가져온 달걀이 부화하게 되면 동물 리스트에 닭(병아리겠지만..)을 추가하기로 한다.

부화했다면 닭의 이름도 정해서 추가해줘야 한다.

 

동물(animals) 리스트(List)에 토끼(rabbit), 강아지(dog), 고양이(cat), 늑대(wolf)가 있다고 선언했다.

그리고 달걀이 부화했는지에 대한 정보를 Booleans 자료형인 egg_hatch에 true로 넣어줬다.

즉, 지금 달걀은 부화했다는 의미가 된다. ( egg_hatch = true; )

 

달걀이 부화했으니 동물 리스트에 닭(chicken)을 추가해줘야 한다.

그 방법은 if 문을 사용해서 egg_hatchtrue 이면 animalschickenadd 해주는 방법이 있을 것이다.

이를 조금 더 쉽게 표현한 것이 바로 Collection if 이다.

 

이 내용은 이름(name) 리스트(list)에 적용시켜 본다.

 

list의 하나의 요소로서 if(egg_hatch) 'fried' 라고 넣어주면

egg_hatchtrue일 때 fried를 넣어준다는 뜻이 된다.

 

 

 

 

 

 

 

 

 

반응형