比较 2 个不同的列表并过滤第一个列表
Compare 2 different list and filter the first list
正在尝试实现以下结果,但无法找到正确的过程或代码来解决它。请找到任何解决方案。
List ids = ['2330', '1111'];
List users = [{"id": ['1234','2330'], "name": "username1"}, {"id":['1111','2330'], "name": "username2"},{"id": ['3455','2331'], "name": "username3"}];
# I want the result to be like
List selectedUsers = [{"id": ['1234','2330'], "name": "username1"}, {"id":['1111','2330'], "name": "username2"}];
我试过了...
List selectedUsers = users.where((u) => ids.contains(u["id"])).toList();
但这不起作用...
Result: []
我做错了什么?
提前致谢!
您的代码有点错误。您正在检查 ids 是否包含整个列表 u["id"].
试试这个:
List selectedUsers = users.where((u) => ids.any((id) => u["id"].contains(id))).toList();
ids.any(...) 将函数作为测试,如果可迭代 ID 的任何元素通过测试,return 为真。在这里,如果 ids 中的任何 id 出现在 u["id"] 中,您的测试应该 return 为真。现在使用这整个东西作为你的过滤器,你会得到想要的结果:
[{id: [1234, 2330], name: username1}, {id: [1111, 2330], name: username2}]
正在尝试实现以下结果,但无法找到正确的过程或代码来解决它。请找到任何解决方案。
List ids = ['2330', '1111'];
List users = [{"id": ['1234','2330'], "name": "username1"}, {"id":['1111','2330'], "name": "username2"},{"id": ['3455','2331'], "name": "username3"}];
# I want the result to be like
List selectedUsers = [{"id": ['1234','2330'], "name": "username1"}, {"id":['1111','2330'], "name": "username2"}];
我试过了...
List selectedUsers = users.where((u) => ids.contains(u["id"])).toList();
但这不起作用...
Result: []
我做错了什么?
提前致谢!
您的代码有点错误。您正在检查 ids 是否包含整个列表 u["id"].
试试这个:
List selectedUsers = users.where((u) => ids.any((id) => u["id"].contains(id))).toList();
ids.any(...) 将函数作为测试,如果可迭代 ID 的任何元素通过测试,return 为真。在这里,如果 ids 中的任何 id 出现在 u["id"] 中,您的测试应该 return 为真。现在使用这整个东西作为你的过滤器,你会得到想要的结果:
[{id: [1234, 2330], name: username1}, {id: [1111, 2330], name: username2}]