List 颤振:检查[{quot;key";:“value";}]列表中是否存在键
您好,1个月了,还在学习飞镖/颤振,有没有办法检查[{“key”:“value”}]中是否存在“key”? 我来自Javascript和python环境,所以我真的不知道这个东西叫什么,我只知道它是一个列表 这是我的JSONList 颤振:检查[{quot;key";:“value";}]列表中是否存在键,list,flutter,dictionary,dart,List,Flutter,Dictionary,Dart,您好,1个月了,还在学习飞镖/颤振,有没有办法检查[{“key”:“value”}]中是否存在“key”? 我来自Javascript和python环境,所以我真的不知道这个东西叫什么,我只知道它是一个列表 这是我的JSON var example = [ { "name": "Store1", "products": [] }, { "name": "Store2&qu
var example = [
{
"name": "Store1",
"products": []
},
{
"name": "Store2",
"products": []
},
{
"name": "Store3",
"products": []
},
{
"name": "Store4",
"products": []
}
]
所以我试着用这样的方式来访问它
var organizedCart = [];
for (var i = 0; i < example.length; i++) {
if (!organizedCart[0].contains(example[i]['name'])) {
organizedCart.add(
{
"name": "${example[i]['name']}",
"products": [],
},
);
}
}
var-organizedCart=[];
对于(var i=0;i
该条件的目标是避免添加现有的“名称”,
因此,基本上,如果organizedCart不包含给定的条件,我想在列表中添加一个{}
提前谢谢
尝试将for循环更改为
for(var i=0;i
Rest看起来似乎是正确的。您可以使用
集合
而不是列表
。如果使用,您可以定义应视为相等元素的内容
因此,我们可以将所有元素添加到这个新的LinkedHashSet
中,这将自动确保元素的添加方式是,如果我们的集合
尚未包含具有相同名称
值的映射,那么我们只添加映射
import 'dart:collection';
void main() {
final example = [
{"name": "Store1", "products": <Object>[]},
{"name": "Store2", "products": <Object>[]},
{"name": "Store2", "products": <Object>[]},
{"name": "Store3", "products": <Object>[]},
{"name": "Store4", "products": <Object>[]},
{"name": "Store4", "products": <Object>[]}
];
final organizedCart = (LinkedHashSet<Map<String, Object>>(
equals: (a, b) => a['name'] == b['name'],
hashCode: (o) => o['name'].hashCode)
..addAll(example))
.toList();
print(organizedCart);
// [{name: Store1, products: []}, {name: Store2, products: []},
// {name: Store3, products: []}, {name: Store4, products: []}]
}
由于我们的Store
实现了它自己的==
和hashCode
,我们可以使用do{…example}
创建一个新的集合
,在那里我们从example
中添加所有Store
对象,现在得到的结果是什么?未捕获的错误:RangeError(index):索引超出范围:没有有效的索引:0嘿,谢谢你!仍在学习dart和map对我来说真的很困惑,tbh…而且我找不到一个很好的dart map/list教程源,可以从头开始解决所有问题。无论如何,谢谢你!map
应该用于定义了key
和value类型的地方代码>。当您开始有多种类型的值
(或键
)在Map
中,您确实做了一些错误的事情,应该考虑使用类来代替。问题是,如果Map
包含多个类型,Dart分析器无法帮助您静态查找类型错误,因此您会面临运行时错误的风险。谢谢,我将从划痕:))Godbless@SuperKola我想你已经看过官方语言之旅了:还有
class Store {
final String name;
final List<Object> products;
Store({required this.name, required this.products});
@override
bool operator ==(Object other) => other is Store && other.name == name;
@override
int get hashCode => name.hashCode;
@override
String toString() => '$name have these products: $products';
}
void main() {
final example = [
Store(name: 'Store1', products: []),
Store(name: 'Store2', products: []),
Store(name: 'Store2', products: []),
Store(name: 'Store3', products: []),
Store(name: 'Store4', products: []),
Store(name: 'Store4', products: []),
];
final organizedCart = {...example}.toList();
print(organizedCart);
// [Store1 have these products: [], Store2 have these products: [],
// Store3 have these products: [], Store4 have these products: []]
}