저번에 List, Map 에 대해서 간략하게 알아봤도 오늘은 List 에서 순회하는 거에 대해서 그리고 js 에서 map, filter, reduce등과 같은 기능을 하는 애들을 알아볼 예정이다.
1.map
맵 같은 경우는 리스트를 순회하면서 요소의 값을 변경하거나 한다 js와 하나 다른점은 dart에서는 iterable로 반환 한다는 점이다 처음에는 되게 햇갈렸다, 아래 코드를 보면서 학습 해보자
void main () {
List<String> foods = ['피자','돈까스','물회'];
final newFoods = foods.map((food) => '먹고싶은 $food');
print(newFoods);
// (먹고싶은 피자, 먹고싶은 돈까스, 먹고싶은 물회)
}
보통은 우리는 [...newFoods] 값으로 로 반환되는 것을 상상하곤 한다 하지만 dart
에서는 조금 다르게 출력 되는 것을 볼수있다.
2.where
리스트를 순회 하면서 원하는 값을 필터링 하는 js 에서 filter라고 생각하면 된다.
출력 되었을 때 map과 마찬가지로 ( ) 로 반환되는 것을 볼수 있다.
void main () {
List<String> foods = ['피자','돈까스','물회'];
final newFoods2 = foods.where((food) => food == '피자');
print(newFoods2);
// (피자)
}
간단하다 조건 만 넣어주면 된다.
* where 1-2
만약 iterable 로 출력 되는 것이 싫으면 마지막 순회 후
print(newFoods2.toList()); 를 붙여주면
// [피자] 라고 출력되는 것을 볼수있다.
3.reduce
reduce 개념은 js 와 비슷하다 역시 코드로 쉽게 설명해보겠다.
List<String> programmers = ['개발자1', '개발자2', '개발자3'];
final wowProgrammers = programmers.reduce((prev, next) => prev + ',' + next);
print(wowProgrammers);
// 개발자1, 개발자2, 개발자3
처음 시작 했을 경우
prev = 개발자1,
next = 개발자2,
그 다음 순회 때는
prev = 개발자1, 개발자2,
next = 개발자3
이런 순으로 순회 한다고 보면 쉽다.
4.fold
reduce와 동작 방식은 비슷하다 하지만 초기값을 설정하고 순회한다 다만 reduce 와 다른점은 reduce는 동일한 타입을 반환해야 하지만, fold는 어떠한 타입으로든 반환할 수 있다.
List<String> programmers = ['개발자1', '개발자2', '개발자3'];
final programmersLength = programmers.fold(0, (prev, next) => prev + next.length);
print(wowProgrammers); 12
우리는 String 형태의 리스트를 순회 했지만, 리턴 값으로 int값이 반환 되는 것을 볼수있다.
처음에 prev 값에 0 이 들어가고 그다음 순회하면서 String 값의 length 가 들어가서 누적되는 것을 확인 할 수있다.
이것으로 List에 대해서 조금 더 알아보는 시간을 가졌다. 요즘 시간이 빨리간다. 좋기도 하지만 조금 더 학습할 시간을 마련하고 공부를 하고 싶다.