【问题标题】:Dart How to compare UIDs of two Lists and Generate third List in FlutterDart 如何比较两个 List 的 UID 并在 Flutter 中生成第三个 List
【发布时间】:2021-12-30 05:02:10
【问题描述】:

我有两个来自 Firebase 的列表,List1 包含用户的所有信息及其 UID。 List2 仅包含部分用户(不是全部)的 UID。

我想通过比较用户的 UID 从 List1 中获取 List2 用户的所有详细信息

怎么做?

List1 包含: uid 姓名 电子邮件 年龄 等等

List2 包含: uid(同样在列表 1 中的用户的 UID)

【问题讨论】:

  • 1.遍历 List1 并创建一个 Map 的 UID 到详细信息。 2.遍历List2,查找Map中的每个UID,得到对应的详细信息。

标签: list firebase flutter dart dsa


【解决方案1】:

@jamesdlin 解释了逻辑,但我想用一个例子来说明这一点:

List list1 = [{'name': 'David', 'uid': '1', 'email': 'David@david.com'},
               {'name': 'Michael', 'uid': '2', 'email': 'Michael@michael.com'},
               {'name': 'Sam', 'uid': '3', 'email': 'SeriousSam@sam.com'},
               {'name': 'Oguz', 'uid': '5', 'email': 'oguz@codeoguz.xyz'},
               {'name': 'Esmail', 'uid': '4', 'email': 'Esmail@esmail.com'}];
List list2 = ['1', '2', '3', '4'];
List list3 = [];

void main() {
  //Loop through list 1
  for(Map item in list1){
    //Loop through list2 for every element in list1
    for(String idUser in list2){
      //If the id mathches add item from list1 to list3
      if(idUser == item['uid']){
        list3.add(item);
      }
    }
  }
  print(list3);
}

【讨论】:

  • 对不起,我是个菜鸟...我有一个 List 列表,第二个列表是 List,它不适用于给定的解决方案...错误:在“for”循环中使用的类型“List”必须使用可分配给“Map”的类型参数实现“Iterable”。
  • 顺便说一句!感谢您的回复...很好,但没有解决我的问题...我现在找到了解决方案...再次感谢
【解决方案2】:

我找到了解决方案。我有两个列表——分别是List<UserModel>List<RequestModle>

在下面的代码中,homeCtrlr.allUsers 是所有用户的完整列表,homeCtrlr.requests 是用户所有 UID 的列表:

final List<UserModel> userDetails = [];

for (var i = 0; i < homeCtrlr.requests!.length; i++) {
  for (var j = i; j < homeCtrlr.allUsers!.length; j++) {
    if (homeCtrlr.requests![i].requestBy ==
        homeCtrlr.allUsers![j].uid) {
      userDetails.add(homeCtrlr.allUsers![j]);
    }
  }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-12-18
    • 2012-03-25
    • 1970-01-01
    • 1970-01-01
    • 2020-12-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多