如何通过 dart 中的另一个项目列表搜索对象列表

use*_*099 11 dart flutter

如何搜索类对象的列表,其中一个属性与另一个字符串列表中的任何值匹配

我能够基于单个字符串进行过滤,但不能基于字符串列表

final List<shop_cart.ShoppingCart> cartprd = snapshot.documents
      .map((f) => shop_cart.ShoppingCart.fromMap(f.data))
      .toList();
Run Code Online (Sandbox Code Playgroud)

Tom*_*son 16

  List<SomeClass> list = list to search;
  List<String> matchingList = list of strings that you want to match against;

  list.where((item) => matchingList.contains(item.relevantProperty));
Run Code Online (Sandbox Code Playgroud)

如果项目数量list很大,您可能需要执行以下操作:

  List<SomeClass> list = list to search;
  List<String> matchingList = list of strings that you want to match against;

  final matchingSet = HashSet.from(matchingList);

  list.where((item) => matchingSet.contains(item.relevantProperty));
Run Code Online (Sandbox Code Playgroud)

或者只是始终将匹配的值存储为哈希集。


Mah*_*san 8

如果您想检查对象列表中的值。你可以按照这个:

 List rows = [
          {"ags": "01224", "name": "Test-1"},
          {"ags": "01224", "name": "Test-1"},
          {"ags": "22222", "name": "Test-2"},
        ];
    
    bool isDataExist(String value) {
    var data= rows.where((row) => (row["name"].contains(value)));
      if(data.length >=1)
     {
        return true;
     }
    else 
     {
        return false;
     }
    }   
Run Code Online (Sandbox Code Playgroud)

您可以将自己的对象数组放在行上。用name替换您的密钥。您可以根据函数isDataExist返回的 true 或 false 来完成您的工作


Suk*_*khi 4

从今天起,你不能。

(旁注:您可以使用 .where、.singleWhere、.firstWhere。站点解释了各种列表/数组方法。)