如何搜索其属性之一与另一个字符串列表中的任何值匹配的类对象的列表
我能够基于单个字符串进行过滤,但不能基于字符串列表
final List<shop_cart.ShoppingCart> cartprd = snapshot.documents
.map((f) => shop_cart.ShoppingCart.fromMap(f.data))
.toList();
答案 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));