如何根据键在Map列表中查找目标Map?
从Map列表中筛选特定键值的目标Map
首先修正你代码里的语法错误:第三个Map的'letter': 'c,缺少闭合单引号,应改为'letter': 'c'。
方法一:获取第一个匹配的Map(推荐用于唯一匹配场景)
使用firstWhere方法可以直接定位到第一个符合条件的Map,适合确定目标唯一的场景:
void main() { List<Map<String, String>> letters = const [ { 'letter': 'a', 'name' : 'ddd', 'video' : 'ss', }, { 'letter': 'b', 'name' : 'ddd', 'video' : 'ss', }, { 'letter': 'c', 'name' : 'ddd', 'video' : 'ss', }, ]; // 筛选letter为'a'的Map,无匹配时返回空Map避免报错 Map<String, String> targetMap = letters.firstWhere( (map) => map['letter'] == 'a', orElse: () => {}, ); // 提取视频信息 String? video = targetMap['video']; print(video); // 输出: ss }
注意:如果没有匹配项且未设置orElse,会抛出StateError,所以建议加上orElse处理边界情况。
方法二:获取所有匹配的Map(用于多匹配场景)
如果列表中可能存在多个符合条件的Map,使用where方法过滤后转成列表:
void main() { List<Map<String, String>> letters = const [ // 省略列表内容 ]; // 筛选所有letter为'a'的Map List<Map<String, String>> targetMaps = letters.where((map) => map['letter'] == 'a').toList(); // 遍历提取每个Map的视频信息 for (var map in targetMaps) { print(map['video']); } }
内容的提问来源于stack exchange,提问作者Terminator
相关产品推荐
相关产品推荐

