【发布时间】:2023-03-12 05:43:01
【问题描述】:
需要帮助。
假设我有这个列表。
List<Program>
#1: complete = true, currentUuid = null
#2: complete = false, currentUuid = null
#3: complete = false, currentUuid = null
#4: complete = false, currentUuid = null
我的 Program 类是 @immutable 并使用冻结的包(无 setter)。
我需要循环。当我检测到第一个完成 = false 时,我需要为 currentUuid 分配一个值。仅适用于我的示例中的 #2。
#1: complete = true, currentUuid = null
#2: complete = false, currentUuid = '1231232131'
#3: complete = false, currentUuid = null
#4: complete = false, currentUuid = null
我当前的代码有效但臃肿。
List<Program> newPrograms = [];
int exitIndex = 0;
for (int i = 0; i < programs.length; i++) {
if (programs[i].complete) {
newPrograms.add(programs[i]);
continue;
}
Program newProgram = programs[i].copyWith(currentUuid: programs[i].uuid);
newPrograms.add(newProgram);
exitIndex = i;
break;
}
for (int j = exitIndex + 1; j < programs.length; j++) {
newPrograms.add(programs[j]);
}
有什么方法可以重构它并制作更好的 dart/flutter 代码?谢谢。
【问题讨论】:
-
您是否明确不想改变原始
programs列表?如果改变它可以接受,那么你可以只使用一个循环,当它找到你想要的项目时,调用.copyWith,然后调用breaks。 -
@jamesdlin 你能提供一些代码 sn-ps 吗?
-
for (int i = 0; i < programs.length; i++) { if (!programs[i].complete) { programs[i] = programs[i].copyWith(...); break; } } -
@jamesdlin 感谢分享。