Flutter 遍历列表和映射列表
我有一个名为list的字符串列表和一个名为type的映射列表 列表['value1','value2'] 类型[{data:'value1',isSelected:false},{data:'value5',isSelected:false}] 如果列表中的值等于type.data值,我想更新“type”列表中的isSelected值 我设法这样做了Flutter 遍历列表和映射列表,flutter,dart,Flutter,Dart,我有一个名为list的字符串列表和一个名为type的映射列表 列表['value1','value2'] 类型[{data:'value1',isSelected:false},{data:'value5',isSelected:false}] 如果列表中的值等于type.data值,我想更新“type”列表中的isSelected值 我设法这样做了 if (type != null) { for (var l in list) { for (var t in type) {
if (type != null) {
for (var l in list) {
for (var t in type) {
if (l.data == t) {
l.isSelected = true;
}
}
}
}
有更合适的方法吗?如果您只需要知道数据值是否包含在列表数组中,您只需要1个循环:
var list = ['value1', 'value2'];
var type = [{data: 'value3', isSelected: false}, {data: 'value4', isSelected:false}]
for (t in type) {
if (list.contains(t.data)) { // changed from indexOf as recommended in comments
t.isSelected = true;
}
}
如果只需要知道数据值是否包含在列表数组中,则只需要1个循环:
var list = ['value1', 'value2'];
var type = [{data: 'value3', isSelected: false}, {data: 'value4', isSelected:false}]
for (t in type) {
if (list.contains(t.data)) { // changed from indexOf as recommended in comments
t.isSelected = true;
}
}
您可以使用
for
和contains
并在发现数据时不再继续。因此,打破循环
var list = ['value1', 'value2'];
var type = [{data: 'value3', isSelected: false}, {data: 'value4', isSelected:false}]
编辑
for (object in type) {
if (list.contains(object['data'])) { // changed from indexOf as recommended in comments
object['isSelected'] = true;
break:
}
});
您可以使用
for
和contains
并在发现数据时不再继续。因此,打破循环
var list = ['value1', 'value2'];
var type = [{data: 'value3', isSelected: false}, {data: 'value4', isSelected:false}]
编辑
for (object in type) {
if (list.contains(object['data'])) { // changed from indexOf as recommended in comments
object['isSelected'] = true;
break:
}
});
作为indexOf()的替代方法,contains更具可读性
if(list.contains(t.data))
。作为indexOf()contains的替代方法,它的可读性更强一些if(list.contains(t.data))
。实际上我刚刚读到了这方面的内容forEach
循环不会中断
无论发生什么,它们都会运行整个循环。您可以看到,break
在回调函数中运行,而不是在循环中运行。因此,您的解决方案可以工作,但没有您指出的性能优势。如果您对循环使用,您可以使用中断
,并通过不必要地完成循环来获得性能。@SydneyY是的,您是对的foreach
不会在dart中中断,最好对循环使用中断
。干杯:)事实上,我刚读到这篇文章forEach
循环不会中断
无论发生什么,它们都会运行整个循环。您可以看到,break
在回调函数中运行,而不是在循环中运行。因此,您的解决方案可以工作,但没有您指出的性能优势。如果您对
循环使用,您可以使用中断
,并通过不必要地完成循环来获得性能。@SydneyY是的,您是对的foreach
不会在dart中中断,最好对循环使用中断
。干杯:)