如何在Dart中使用条件过滤列表

6

我有一个列表,想对其设置条件。例如,我想要从列表lst中获取值大于10的项目:

var lst = [{"value":5 , "name":"test1"},
           {"value":12 , "name":"test2"},
           {"value":8 , "name":"test3"},
           {"value":23 , "name":"test4"}];

/*
output: value greater than 10 => 
    [{"value":12 , "name":"test2"},
     {"value":23 , "name":"test4"}]
*/

这是一个重复的问题: https://dev59.com/s1UL5IYBdhLWcg3w670R - ocheriaf
@ocheriaf 我看到了这个问题,但我不是在使用Flutter。它非常复杂,需要很多解释,而且我也不理解它。 - Mohammad Nazari
4个回答

18
你可以使用迭代器的 where 函数来过滤其元素,然后将结果迭代器转换回列表,或者使用列表字面量语法,或者两者结合使用 "展开" where 的结果:
var list = [ ... ];
var filtered1 = list.where((e) => e["value"] > 10).toList();
var filtered2 = [for (var e in list) if (e["value"] > 10) e];
var filtered3 = [... list.where((e) => e["value"] > 10)];

3
为了基于条件过滤列表,你可以使用 List.where 方法,该方法接受一个测试函数并返回一个包含符合测试的元素的新 Iterable。
要获得仅包含大于 10 的值的列表,您可以这样过滤 map 列表:
lst.where((e) => e['value'] > 10); //Returns a lazy Iterable

如果您需要稍后修改列表,可以附加 .toList() 以获取新列表。


2

尝试使用以下代码:

  List lst = [{"value":5 , "name":"test1"}  ,{"value":12 , "name":"test2"}  , {"value":8 , "name":"test3"}  , {"value":23 , "name":"test4"} ];
  List newLst = lst.where( (o) => o['value'] > 5).toList();

  print(newLst);

1

> 只需尝试此函数,其中catogory_id == 1是条件

List<dynamic> chooseCatogory(List<dynamic> list) {
    List newlist = list.where((o) => o['category_id'] == '1').toList();
    return newlist;
  }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接