Dart의 where
메서드와 JavaScript의 filter
메서드는 매우 유사한 기능을 수행합니다. 두 메서드 모두 Iterable
(Dart에서) 또는 Array
(JavaScript에서) 의 요소를 순회하며 주어진 조건 함수에 따라 요소들을 필터링하는 역할을 합니다.
다음은 Dart에서 where
메서드를 사용하는 예시입니다:
List<int> numbers = [1, 2, 3, 4, 5];
Iterable<int> evenNumbers = numbers.where((number) => number % 2 == 0);
print(evenNumbers.toList()); // [2, 4]
여기서 where
메서드는 리스트의 각 숫자에 대해 익명 함수 (number) => number % 2 == 0
을 실행하여 짝수만 필터링합니다.
비슷하게, JavaScript에서 filter
메서드를 사용하는 예시는 다음과 같습니다:
const numbers = [1, 2, 3, 4, 5];
const evenNumbers = numbers.filter(number => number % 2 === 0);
console.log(evenNumbers); // [2, 4]
JavaScript의 filter
메서드 역시 배열의 각 요소에 대해 화살표 함수 number => number % 2 === 0
을 실행하여 짝수만 필터링합니다.
두 예시 모두에서, where
/filter
메서드는 원본 배열/리스트를 변경하지 않고, 새로운 Iterable
/Array
를 반환합니다. 이러한 특성 덕분에 함수형 프로그래밍 패러다임을 따르며, 데이터의 불변성을 유지할 수 있습니다.
결론적으로, Dart의 where
메서드와 JavaScript의 filter
메서드는 동일한 패러다임을 따르며, 컬렉션에서 특정 조건을 만족하는 요소들만 추출하는데 사용됩니다.
이 Dart 프로그램에서는 List
안에 Map
이 포함된 구조를 사용해 사람들의 정보를 저장하고 있습니다. 각 Map
은 사람의 이름과 그들이 속한 그룹을 나타냅니다.
void main() {
List<Map<String, String>> people = [
{
'name': '로제',
'group': '블랙핑크',
},
{
'name': '지수',
'group': '블랙핑크',
},
{
'name': 'RM',
'group': 'BTS',
},
{
'name': '뷔',
'group': 'BTS',
},
];
print(people);
final blackPinkMap = people.where((item) => item['group'] == '블랙핑크').toList();
final bts = people.where((item) => item['group'] == 'BTS').toList();
print(blackPinkMap);
print(bts);
}
people
: 이 변수는 List<Map<String, String>>
타입으로 선언되어 있으며, 각각의 Map
에는 'name'과 'group'이라는 키와 그에 대응하는 문자열 값이 저장되어 있습니다.
print(people)
: 이 코드는 people
리스트 전체를 출력합니다.
blackPinkMap
과 bts
: 이 두 변수는 people
리스트를 where
메소드를 사용해 필터링하여 특정 그룹의 멤버만 담고 있는 새로운 리스트를 생성합니다.
blackPinkMap
: 'group' 값이 '블랙핑크'인 요소만 포함합니다.bts
: 'group' 값이 'BTS'인 요소만 포함합니다.print(blackPinkMap)
과 print(bts)
: 이 두 코드는 필터링된 리스트를 출력합니다.
결과적으로, 이 프로그램은 전체 사람 목록과 그 중에서 '블랙핑크'와 'BTS' 그룹에 속한 사람들의 목록을 출력합니다. 이런 방식으로 데이터를 구조화하고 필터링하는 것은 정보를 더 쉽게 관리하고 필요한 데이터만 추출할 수 있게 해줍니다.