Flutter开发:如何根据指定id数组筛选用户列表生成新列表
Flutter 根据指定ID列表筛选集合的实现方法
核心逻辑使用Dart内置的where()遍历+contains()匹配规则即可实现,步骤如下:
- 定义原始数据和筛选条件
// 原始用户列表 List<Map<String, dynamic>> users = [ { "id": 31, "name": "John", }, { "id": 23, "name": "Sami", }, { "id": 34, "name": "Leon", } ]; // 筛选目标ID列表 List<int> targetIds = [31, 34];
- 执行筛选操作
List<Map<String, dynamic>> filteredUsers = users.where((user) => targetIds.contains(user['id'])).toList();
where()会遍历原始列表,仅保留符合判断条件的元素,返回Iterable类型- 每次遍历取出当前元素的
id,用contains()判断是否在目标ID列表内,符合则保留 - 最后调用
toList()将Iterable转换为List类型,即可得到预期的筛选结果
如果需要绑定按钮点击触发筛选,直接将筛选逻辑放入按钮的点击回调中即可,示例:
ElevatedButton( onPressed: () { final filteredUsers = users.where((user) => targetIds.contains(user['id'])).toList(); // 后续可更新状态变量,刷新UI展示筛选后的列表 debugPrint(filteredUsers.toString()); }, child: const Text('触发筛选') )
性能优化方案
如果目标ID列表长度较大,可先将ID列表转换为Set类型再做匹配,Set的contains()查找时间复杂度为O(1),比List的O(n)查找效率更高:
final targetIdSet = targetIds.toSet(); final filteredUsers = users.where((user) => targetIdSet.contains(user['id'])).toList();
内容的提问来源于stack exchange,提问作者Nashwan
相关产品推荐
相关产品推荐

