728x90

다트는 List, Map, Set 컬렉션을 제공한다.

 

List

- 순서가 있는 자료를 담는 컬렉션이다.

- 같은 타입의 자료를 여러개 담을 수 있고 특정 인덱스로 접근 가능하다.

 

Map : { key : value }

- key 와 value의 쌍으로 저장할 수 있고, 키를 통해 값을 얻을 수 있다.

- key는 고유한 값이여야 한다. 이미 있는 key에 값을 넣으면 덮어 씌어진다.

void main(){
  var fruits = { //맵 만들기
    'apple''사과',
    'banana''바나나',
    'carrot''당근',
  };
 
  fruits.addAll({
    'pear' : '배',
    'pineapple' : '파인애플',
  });
 
  print(fruits);
 
  fruits.remove('banana'); // 제거
 
  print(fruits.keys.toList()); // key 가져오기
  print(fruits.values.toList()); // values 가져오기
}

 

 

Set

- 중복이 허용되지 않고, 찾는 값이 있는지 없는지 판단하고자 할 때 사용한다.

 

 

 

 

void main(){
  final List<String> Items = ['짜장''짬봉''볶음밥''사천짜장''송이덧밥'];
 
  for(String item in Items){
    print(item);
  }
 
  // map() 메소드는, 사용자가 반환 된 객체에서 항목을 요청할 때까지 함수가 호출되지 않는다.
  final newItems = Items.map((x) => x);
  final newItems1 = Items.map((x) => x);
  print(newItems);
  print(newItems1);
  print(newItems == newItems1); // false
  // 눈에 보이는 결과는 동일하게 보이지만, 각각 객체로 생성되어 서로 다르다.
 
  // // 즉시 반영되도록 하고자 하는 경우에는 toList(), toMap() 메소드를 사용한다.
  final newItems2 = Items.map((x) => x).toList();
  print(Items);
  print(newItems2);
  print(Items == newItems2); // false : 원 Items 와 newItems2 는 다르다.
}

 

void main(){
  // 문자열을 분리하고 map 메소드를 사용하여 새로운 List 만들기
  var numbers = '13579';
  final parsed = numbers.split('').map((e) => '$e.png').toList();
  print(parsed);
}

 

void main(){
  var myList = [0842697];
  var result = myList.where((item) => item > 5).toList();
  print(result); // [6, 8, 7]
  var fst = myList.firstWhere((item) => item > 5);
  print(fst); // 8
  var last = myList.lastWhere((item) => item > 5);
  print(last); // 7
}

 

void main(){
  List<String> names = ['Max''John''Sara''Peter''Charlie'];
  Iterable<String> v_name = names.where((element) => element.contains('a'));
  print(v_name); // (Max, Sara, Charlie)
}

 

void main() {
  final myList = [13549110-4-10];
  final result = myList.reduce((sum, element){
    print('sum : ${sum}, element : ${element}');
    return sum + element;
  });
  print(result);
}

첫번째만 sum, element 가 1과 3이 대입되고, 그 다음부터는 return 결과값이 sum 으로 대입된다.

void main() {
  final myList = [13549110-4-10];
  final result = myList.reduce((max, element){
    //print('max : ${max}, element : ${element}');
    if(max > element){
      return max;
    } else {
      return element;
    }
  });
  print(result);
}

 

fold 는 시작값인 0을 지정한다.

void main(){
  List<int> myList = [13549110-4-10];
  final sum = myList.fold<int>(0, (sum, element){
    //print('sum : ${sum}, element : ${element}');
    // 최초 sum 값에 0 이 대입된다. 이후의 sum 은 return 결과값
    return sum + element;
  });
  print(sum); // result : 19
}

 

class Person {
  final String name;
  final int age;
 
  Person(this.name, this.age);
}
 
List<Person> person = [
  Person('A'10),
  Person('B'20),
  Person('C'30),
  Person('D'40),
  Person('E'50),
  Person('F'60),
];
 
void main() {
  final ages = person.fold<int>(0, (sum, value) => sum + value.age);
  print('$ages'); // result : 210
 
  final names = person.fold<String>('', (sum, value) => sum + value.name);
  print('${names}'); // result : ABCDEF
}

 

 

 

 

스프레드 연산자

... 연산자는 컬렉션을 펼쳐주는 연산자로 스프레드 연산자라고 한다.

다른 컬렉션 안에 컬렉션을 삽입할 때 사용한다.

컬렉션도 타입 추론이 가능하여 일반적으로 var 로 선언한다.

void main() {
  var items = ['짜장''짬봉''볶음밥'];
  print(items);
 
  var data = [...items, '라면''떡볶이''김밥'];
  print(data); // [짜장, 짬봉, 볶음밥, 라면, 떡볶이, 김밥]
}

 

 

 

 

 

 

블로그 이미지

Link2Me

,