首页 > 解决方案 > 根据键值之一从映射中检索条目

问题描述

我已经查看了类似的帖子,但仍然无法与我所追求的内容保持一致。

我想从以下地图中检索满足特定条件的所有条目。

简单的地图

List<Map<String, dynamic>> _playList = [
    {'songId': 1, 'setId': 1},
    {'songId': 2, 'setId': 1},
    {'songId': 3, 'setId': 1},
    {'songId': 4, 'setId': 2},
    {'songId': 5, 'setId': 3},
    {'songId': 6, 'setId': 4},
    {'songId': 6, 'setId': 5},
    {'songId': 6, 'setId': 6},
    {'songId': 6, 'setId': 7},
  ];

我正在尝试使用一种方法,该方法将遍历此映射,查找传递给该方法的 int 的所有条目,然后将结果存储在一个新数组中。

我到目前为止的方法

Future<List<Song>> songFromCurrentSetlist (int setlistId) async {
    _playList.forEach((_) => setlistId == _playList.???);
  }

显然,有点卡住了。

基本上,如果在该方法的参数列表中为 setlistId 接收到 1,我希望为 setlistId == 1 存在的每个 songId 取回值 1、2、3。

谢谢你,鲍勃

标签: flutterdartdart-pub

解决方案


当您的 setId 匹配时,您可以创建歌曲列表并添加新歌曲。

遵循示例清除您的想法。

void main(){ 
List<Map<String, dynamic>> _playList = [
    {'songId': 1, 'setId': 1},
    {'songId': 2, 'setId': 1},
    {'songId': 3, 'setId': 1},
    {'songId': 4, 'setId': 2},
    {'songId': 5, 'setId': 3},
    {'songId': 6, 'setId': 4},
    {'songId': 6, 'setId': 5},
    {'songId': 6, 'setId': 6},
    {'songId': 6, 'setId': 7},
  ];

  List<int> songs = [];
   songFromCurrentSetlist (int setlistId) async {
     _playList.forEach((index){
       if(index['setId'] == setlistId){
         songs.add(index['songId']);
       }
    });
  }

  songFromCurrentSetlist(1);

  print(songs.toList());
}

推荐阅读