형 변환
List
- List를 List의 내장함수 asmap()을 사용해서 Map으로 형변환을 할수 있다.
- key 값에는 인덱스, value에는 list의 값들이 들어가게 된다.
void main (){
List<String> fruit = ['banana', 'apple','lemon','mango'];
print(fruit);
print(fruit.asMap());
}
=>
[banana, apple, lemon, mango]
{0: banana, 1: apple, 2: lemon, 3: mango}
- toSet()을 사용하여 형변환을 할 수 있다.
void main (){
List<String> fruit = ['banana', 'apple','lemon','mango','mango'];
print(fruit);
print(fruit.toSet());
}
=>
[banana, apple, lemon, mango, mango]
{banana, apple, lemon, mango}
void main (){
List<String> fruit = ['banana', 'apple','lemon','mango','mango'];
Map fruitMap = fruit.asMap();
print(fruitMap.keys);
print(fruitMap.values);
}
=>
(0, 1, 2, 3, 4)
(banana, apple, lemon, mango, mango)
print(fruitMap.keys.toList());
print(fruitMap.values.toList());
=>
[0, 1, 2, 3, 4]
[banana, apple, lemon, mango, mango]
- key 와 value 값을 list 값으로 불러올 수 있다.
- 불러온 값에
()
가 사용되었는데 iterable
이라고 한다. iterable
은 잘 사용하지는 않고 list나 다른 형태로 바꿔서 사용한다.
map()
void main() {
List<String> fruit = ['banana', 'apple', 'lemon', 'mango', 'mango'];
final newFruit = fruit.map((x) {
return '과일 $x';
});
print(fruit);
print(newFruit.toList());
final newFruit2 = fruit.map((x)=>'과일 $x');
print(newFruit2.toList());
}
String number = '12345';
final parsed = number.split('').map((x)=>'$x.jpg').toList();
print(parsed);
map 활용
void main() {
final number = 123;
print(number.toString().split('').map((x) => '$x.jpg').toList());
final numbers = [
123,
456,
789,
];
print(
numbers.map(
(x) => x.toString().split('').map(
(y) => '$y.jpg',
).toList(),
)
);
}
print(numbers.asMap().entries.toList()[0].key);
[1.jpg, 2.jpg, 3.jpg]
([1.jpg, 2.jpg, 3.jpg], [4.jpg, 5.jpg, 6.jpg], [7.jpg, 8.jpg, 9.jpg])
0
Set
void main() {
Set fruit = {
'banana', 'apple','lemon','mango'
};
final newSet = fruit.map((x) => '과일 $x').toSet();
print(newSet);
}
Map
void main() {
Map<String, String> fruit = {'banana': '바나나', 'apple': '사과', 'lemon': '레몬'};
final result = fruit.map(
(key, value) => MapEntry('fruit $key', '과일 $value'),
);
print(fruit);
print(result);
final key = fruit.keys.map((x)=>'fruit $x').toList();
print(key);
final value = fruit.values.map((x) => '과일 $x').toList();
print(value);
}
where
- List의 값들을 루핑하면서 true 또는 false 값을 돌려준다.
- 값이 true면 출력되고 false면 삭제된다.
void main() {
List<Map<String, String>> eat = [
{
'name' : '사과',
'group' : '과일'
},
{
'name' : '바나나',
'group' : '과일'
},
{
'name' : '양파',
'group' : '채소'
},
{
'name' : '마늘',
'group' : '채소'
},
];
print(eat);
final fruit = eat.where((x)=>x['group'] == '과일').toList();
final vegetable = eat.where((x)=>x['group'] == '채소').toList();
print(fruit);
print(vegetable);
}
[{name: 사과, group: 과일}, {name: 바나나, group: 과일}, {name: 양파, group: 채소}, {name: 마늘, group: 채소}]
[{name: 사과, group: 과일}, {name: 바나나, group: 과일}]
[{name: 양파, group: 채소}, {name: 마늘, group: 채소}]
reduce
void main() {
List<int> numbers = [
1,
3,
5,
7,
9
];
final result = numbers.reduce((prev, next){
print('-----------------');
print('previous : $prev');
print('next : $next');
print('total : ${prev + next}');
return prev + next;
});
print(result);
}
=>
-----------------
previous : 1
next : 3
total : 4
-----------------
previous : 4
next : 5
total : 9
-----------------
previous : 9
next : 7
total : 16
-----------------
previous : 16
next : 9
total : 25
25
- arrow 함수를 사용하여 코드를 간단히 할 수 있다.
void main() {
List<int> numbers = [
1,
3,
5,
7,
9
];
final result = numbers.reduce((prev, next) => prev + next);
print(result);
}
- 다음과 같이 String을 사용해서 쓸 수 있다
void main() {
List<String> words = [
'안녕하세요 ',
'저는 ',
'Tom입니다'
];
final sentence = words.reduce((prev, next) => prev + next);
print(sentence);
}
안녕하세요 저는 Tom입니다
- reduce 사용시 주의점은 다른 타입으로 리턴해 줄 수 없다.
void main() {
List<String> words = [
'안녕하세요 ',
'저는 ',
'Tom입니다'
];
final sentence = words.reduce((prev, next) => prev.length + next.length);
print(sentence);
}
fold
- reduce에서 하지 못했던 기능을 할 수 있다.
void main() {
List<int> numbers = [1, 3, 5, 7, 9];
final sum = numbers.fold<int>(0, (prev, next) {
print('-----------------');
print('previous : $prev');
print('next : $next');
print('total : ${prev + next}');
return prev + next;
});
}
-----------------
previous : 0
next : 1
total : 1
-----------------
previous : 1
next : 3
total : 4
-----------------
previous : 4
next : 5
total : 9
-----------------
previous : 9
next : 7
total : 16
-----------------
previous : 16
next : 9
total : 25
- reduce 기능을 fold로 사용할 수 있다.
void main() {
List<String> words = [
'안녕하세요 ',
'저는 ',
'Tom입니다'
];
final sentence = words.fold<String>('', (prev, next) => prev + next);
print(sentence);
}
안녕하세요 저는 Tom입니다
- reduce에서 하지 못했던 다른 타입으로 출력을 fold에서는 할 수 있다.
void main() {
List<String> words = [
'안녕하세요 ',
'저는 ',
'Tom입니다'
];
final sum = words.fold<int>(0, (prev, next) => prev + next.length);
print(sum);
}
15
Spread Operator
void main() {
List<int> even = [2, 4, 6, 8];
List<int> odd = [
1,
3,
5,
7,
];
print([...even , ...odd]);
}
[2, 4, 6, 8, 1, 3, 5, 7]