Data Pipeline Patterns
Filter Scores
Filtering keeps values that match a rule and drops the rest before the next stage.
Program
Play the program to keep names whose score reaches the selected minimum.
filter_scores.dart
Replay: real traced execution (multi-file project)
void main() {
var scores = {'Ada': 92, 'Linus': 78, 'Grace': 86};
var minScore = 80;
var passed = <String>[];
for (var entry in scores.entries) {
if (entry.value >= minScore) {
passed.add(entry.key);
}
}
print('passed=${passed.join(",")}');
}
void main() {
var scores = {'Ada': 92, 'Linus': 78, 'Grace': 86};
var minScore = 90;
var passed = <String>[];
for (var entry in scores.entries) {
if (entry.value >= minScore) {
passed.add(entry.key);
}
}
print('passed=${passed.join(",")}');
}
scores ← {Ada: 92, Linus: 78, Grace: 86}
1void main() {2 var scores = {'Ada': 92, 'Linus': 78, 'Grace': 86};3 var minScore = 80;values this step{Ada: 92, Linus: 78, Grace: 86}scoresminScore ← 80
2var scores = {'Ada': 92, 'Linus': 78, 'Grace': 86};3var minScore = 80;4var passed = <String>[];values this step80minScorepassed ← []
3var minScore = 80;4var passed = <String>[];5for (var entry in scores.entries) {values this step[]passedentry ← Ada=92
4var passed = <String>[];5for (var entry in scores.entries) {6 if (entry.value >= minScore) {values this stepAda=92entrykeep ← true
5for (var entry in scores.entries) {6 if (entry.value >= minScore) {7 passed.add(entry.key);values this steptruekeep92entry.value80minScorepassed ← [Ada]
6if (entry.value >= minScore) {7 passed.add(entry.key);8}values this step[] → [Ada]passedentry ← Linus=78
4var passed = <String>[];5for (var entry in scores.entries) {6 if (entry.value >= minScore) {values this stepLinus=78entrykeep ← false
5for (var entry in scores.entries) {6 if (entry.value >= minScore) {7 passed.add(entry.key);values this stepfalsekeep78entry.value80minScoreentry ← Grace=86
4var passed = <String>[];5for (var entry in scores.entries) {6 if (entry.value >= minScore) {values this stepGrace=86entrykeep ← true
5for (var entry in scores.entries) {6 if (entry.value >= minScore) {7 passed.add(entry.key);values this steptruekeep86entry.value80minScorepassed ← [Ada, Grace]
6if (entry.value >= minScore) {7 passed.add(entry.key);8}values this step[Ada] → [Ada, Grace]passedprint('passed=${passed.join(",")}');
9 }10 print('passed=${passed.join(",")}');11}outputpassed=Ada,Gracevalues this step[Ada, Grace]passed
scores ← {Ada: 92, Linus: 78, Grace: 86}
1void main() {2 var scores = {'Ada': 92, 'Linus': 78, 'Grace': 86};3 var minScore = 90;values this step{Ada: 92, Linus: 78, Grace: 86}scoresminScore ← 90
2var scores = {'Ada': 92, 'Linus': 78, 'Grace': 86};3var minScore = 90;4var passed = <String>[];values this step90minScorepassed ← []
3var minScore = 90;4var passed = <String>[];5for (var entry in scores.entries) {values this step[]passedentry ← Ada=92
4var passed = <String>[];5for (var entry in scores.entries) {6 if (entry.value >= minScore) {values this stepAda=92entrykeep ← true
5for (var entry in scores.entries) {6 if (entry.value >= minScore) {7 passed.add(entry.key);values this steptruekeep92entry.value90minScorepassed ← [Ada]
6if (entry.value >= minScore) {7 passed.add(entry.key);8}values this step[] → [Ada]passedentry ← Linus=78
4var passed = <String>[];5for (var entry in scores.entries) {6 if (entry.value >= minScore) {values this stepLinus=78entrykeep ← false
5for (var entry in scores.entries) {6 if (entry.value >= minScore) {7 passed.add(entry.key);values this stepfalsekeep78entry.value90minScoreentry ← Grace=86
4var passed = <String>[];5for (var entry in scores.entries) {6 if (entry.value >= minScore) {values this stepGrace=86entrykeep ← false
5for (var entry in scores.entries) {6 if (entry.value >= minScore) {7 passed.add(entry.key);values this stepfalsekeep86entry.value90minScoreprint('passed=${passed.join(",")}');
9 }10 print('passed=${passed.join(",")}');11}outputpassed=Adavalues this step[Ada]passed
Follow the Filter
scoresstarts as Ada 92, Linus 78, and Grace 86.minScorestarts at80.- The loop checks each score with
entry.value >= minScore. - Ada and Grace pass; Linus does not.
- The program prints
passed=Ada,Grace. | minScore | Ada 92 | Linus 78 | Grace 86 | output | | ---: | --- | --- | --- | --- | | 80 | keep | drop | keep | passed=Ada,Grace | | 90 | keep | drop | drop | passed=Ada |
entries
`scores.entries` visits each key/value pair in a map.
filter
The `if` statement decides whether the current entry continues.
join
`passed.join(',')` turns the kept names into display text.
Exercise: filter_scores.dart
Reproduce passed=Ada,Grace, then use minScore 90 to predict passed=Ada.