1️⃣ List의 asMap(), toSet()
void main() {
List<String> blackPink = ['로제', '지수', '리사', '제니', '제니'];
print(blackPink);
print(blackPink.asMap());
print(blackPink.toSet());
Map blackPinkMap = blackPink.asMap();
print(blackPinkMap.keys);
print(blackPinkMap.values);
}
📝 실행 결과
[로제, 지수, 리사, 제니, 제니]
{0: 로제, 1: 지수, 2: 리사, 3: 제니, 4: 제니}
{로제, 지수, 리사, 제니}
(0, 1, 2, 3, 4)
(로제, 지수, 리사, 제니, 제니)
📌 asMap()을 사용하면 인덱스를 키로, 리스트 요소를 값으로 가지는 Map으로 변환
📌 toSet()을 사용하면 중복된 요소를 제거한 Set으로 변환
2️⃣ map()을 활용한 데이터 변형
void main() {
List<String> blackPink = ['로제', '지수', '리사', '제니'];
final newBlackPink = blackPink.map((x) {
return '블랙핑크 $x';
});
print(blackPink);
print(newBlackPink.toList());
final newBlackPink2 = blackPink.map((x) => '블랙핑크 $x');
print(newBlackPink2.toList());
String number = '13579';
final parsed = number.split('').map((x) => '$x.jpg').toList();
print(parsed);
}
📝 실행 결과
[로제, 지수, 리사, 제니]
[블랙핑크 로제, 블랙핑크 지수, 블랙핑크 리사, 블랙핑크 제니]
[블랙핑크 로제, 블랙핑크 지수, 블랙핑크 리사, 블랙핑크 제니]
[1.jpg, 3.jpg, 5.jpg, 7.jpg, 9.jpg]
📌 map()을 사용하면 각 요소를 변환하여 새로운 리스트를 생성할 수 있습니다.
3️⃣ where()을 활용한 필터링
void main() {
List<int> numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
final evenNumbers = numbers.where((x) => x % 2 == 0).toList();
final oddNumbers = numbers.where((x) => x % 2 != 0).toList();
print(evenNumbers);
print(oddNumbers);
}
📝 실행 결과
[2, 4, 6, 8, 10]
[1, 3, 5, 7, 9]
📌 where()를 사용하면 특정 조건을 만족하는 요소들만 필터링
4️⃣ reduce()와 fold()를 활용한 값 누적
void main() {
List<int> numbers = [1, 3, 4, 5, 7];
final result = numbers.reduce((prev, next) => prev + next);
print(result);
}
📝 실행 결과
20
📌 reduce()는 리스트의 모든 요소를 하나로 축소하는 역할을 합니다.
🔹 fold()를 활용한 개선
void main() {
List<int> numbers = [1, 3, 4, 5, 7];
final sum = numbers.fold<int>(0, (prev, next) => prev + next);
print(sum);
}
📝 실행 결과
20
📌 fold()는 reduce()와 유사하지만, 초기값을 설정할 수 있어 더 유연
5️⃣ 리스트 결합 (캐스케이드 문법)
void main() {
List<int> even = [2, 4, 6, 8];
List<int> odd = [1, 3, 5, 7];
print([...even, ...odd]);
print(even == [...even]);
}
📝 실행 결과
[2, 4, 6, 8, 1, 3, 5, 7]
false
📌 ... (spread operator)를 사용하면 리스트를 합칠 수 있으며, 새로운 리스트가 생성
6️⃣ Map을 클래스로 변환하여 구조화하기
Map은 자유도가 높지만, 구조화되지 않아 오타나 잘못된 값이 들어갈 위험이 있기 때문에
이러한 문제를 방지하기 위해 클래스를 활용하는 것이 좋습니다.
class Idol {
String name;
int age;
Idol({required this.name, required this.age});
}
void main() {
List<Idol> idols = [
Idol(name: '지수', age: 28),
Idol(name: '로제', age: 27),
];
for (var idol in idols) {
print('이름: ${idol.name}, 나이: ${idol.age}');
}
}
📝 실행 결과
이름: 지수, 나이: 28
이름: 로제, 나이: 27
📌 클래스를 사용하면 데이터의 구조를 명확하게 정의할 수 있어 더 안전하고 신뢰할 수 있는 코드가 가능하다.
반응형
'Flutter > Dart' 카테고리의 다른 글
Dart 3.0 핵심 정리 (1) | 2025.03.31 |
---|---|
🚀 dart 비동기 (async & await) (0) | 2025.03.28 |
Dart OOP (Object Oriented Programming) (0) | 2025.03.27 |
Dart 핵심 개념 한눈에 정리! (변수, 타입, Nullable, Enum, Loop 등) (1) | 2025.03.26 |
Dart 클래스 classes (2) (0) | 2025.02.03 |