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

时间:2019-07-04 08:50:22

标签: flutter dart

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

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

final List<shop_cart.ShoppingCart> cartprd = snapshot.documents
      .map((f) => shop_cart.ShoppingCart.fromMap(f.data))
      .toList();

6 个答案:

答案 0 :(得分:5)

如果要检查对象列表中的值。您可以按照以下步骤操作:

 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;
     }
    }   

您可以将自己的对象数组放在上。将您的密钥替换为名称。您可以根据功能 isDataExist

返回的true或false执行工作

答案 1 :(得分:2)

 var one = [
    {'id': 1, 'name': 'jay'},
    {'id': 2, 'name': 'jay11'},
    {'id': 13, 'name': 'jay222'}
  ];

  int newValue = 13;

  print(one
      .where((oldValue) => newValue.toString() == (oldValue['id'].toString())));

输出:({id: 13, name: jay222})

将输出存储在任何变量中检查是否 variable.isEmpty 然后新值是否唯一

var checkValue = one
      .where((oldValue) => newValue.toString() == (oldValue['id'].toString()))
      .isEmpty;
  if (checkValue) {
    print('Unique');
  } else {
    print('Not Unique');
  }

输出:不唯一

答案 2 :(得分:0)

到目前为止,您还不能。

(附注:您可以使用.where,.singleWhere,.firstWhere。This网站介绍了各种列表/数组方法。)

答案 3 :(得分:0)

  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));

如果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));

否则,始终将匹配值存储为哈希集。

答案 4 :(得分:0)

使用自定义相等比较器的示例:

import 'package:enumerable/enumerable.dart';

void main() {
  final products = _getProducts();
  final favorites = [Product('2'), Product('6')];
  final query = products.intersect(favorites, _MyProductComparer());
  print(query.toList());
}

List<Product> _getProducts() {
  final result = <Product>[];
  result.add(Product('1'));
  result.add(Product('2'));
  result.add(Product('3'));
  result.add(Product('4'));
  result.add(Product('5'));
  return result;
}

class Product {
  String id;
  Product(this.id);

  @override
  String toString() => 'Product $id';
}

class _MyProductComparer extends IEqualityComparer<Product> {
  @override
  bool equals(Product a, Product b) {
    return a.id == b.id;
  }

  @override
  int getHashCode(Product object) {
    return object.id.hashCode;
  }
}

结果:

[Product 2]

答案 5 :(得分:0)

您可以简单地使用List.where()来过滤列表

final List<shop_cart.ShoppingCart> cartprd = snapshot.documents
      .where((f) => shop_cart.ShoppingCart.contains(f.data));