【问题标题】:Iterate through list and list of map遍历列表和地图列表
【发布时间】:2020-05-18 19:06:21
【问题描述】:

我有一个名为 list 的字符串列表和一个名为 type 的映射列表

列表 ['value1', 'value2']

类型 [{data: 'value1', isSelected: false},{data: 'value5', isSelected: false}]

如果列表中的值等于 type.data 值,我想更新“类型”列表中的 isSelected 值

我设法做到了这一点

if (type != null) {
  for (var l in list) {
    for (var t in type) {
      if (l.data == t) {
        l.isSelected = true;
      }
    }
  }
}

有没有更体面的做法?

【问题讨论】:

    标签: flutter dart


    【解决方案1】:

    如果你只需要知道数据的值是否包含在列表数组中,你只需要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;
      }
    }
    

    【讨论】:

    • 作为 indexOf() 的替代方法,包含更具可读性。 if (list.contains(t.data)).
    【解决方案2】:

    您可以将forcontains 一起使用,当发现数据时无需继续。因此,打破循环。

    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:
      }
    });
    

    【讨论】:

    • 其实我刚读到这个。 forEach 循环不会break 无论如何都会运行整个循环。您可以看到break 在回调函数中运行,而不是在循环中。因此,您的解决方案有效,但没有您指出的性能优势。如果您使用for 循环,则可以使用break 并通过不必要地完成循环来获得性能。
    • @SydneyY 是的,你是对的 foreach 不会在飞镖中中断,最好使用 for loop 。干杯:)
    猜你喜欢
    • 2022-01-13
    • 2019-08-24
    • 2022-01-23
    • 1970-01-01
    • 2017-07-23
    • 2016-10-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多