Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Flutter 遍历列表和映射列表_Flutter_Dart - Fatal编程技术网

Flutter 遍历列表和映射列表

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) {

我有一个名为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 (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中中断,最好对循环使用
中断
。干杯:)