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 = [0, 8, 4, 2, 6, 9, 7];
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 = [1, 3, 5, 4, 9, 11, 0, -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 = [1, 3, 5, 4, 9, 11, 0, -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 = [1, 3, 5, 4, 9, 11, 0, -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); // [짜장, 짬봉, 볶음밥, 라면, 떡볶이, 김밥]
}
|
728x90
'Flutter 앱 > Dart 언어' 카테고리의 다른 글
Dart 직렬화(Serialization) 및 역직렬화(Deserialization) (0) | 2023.12.08 |
---|---|
Dart 3.0 records (0) | 2023.10.19 |
Dart Class(클래스) (0) | 2022.06.27 |
Dart Asynchronous programming(비동기 프로그래밍) (0) | 2022.06.23 |
Dart function(함수) (0) | 2022.06.22 |