Flutter 如何使用配置单元在Dart中按值(而不是按索引)读取/更新/删除?
样品Flutter 如何使用配置单元在Dart中按值(而不是按索引)读取/更新/删除?,flutter,dart,flutter-hive,Flutter,Dart,Flutter Hive,样品 deleteItem(int索引){ 最终包装箱=蜂箱包装箱(“交付”); 框。删除(索引); } 我想将索引参数更改为对象的id),如下所示 deleteItem(内部id){ 最终包装箱=蜂箱包装箱(“交付”); //框。删除(索引); //在此处按id删除框 } 下面是我的TypeAdapter类: @HiveType(类型ID:0) 课堂教学{ @HiveField(0) 最终int id; 交付(此.id); } 将键值数据库视为一个有单词及其定义的常规良好旧词汇表。它允许您
deleteItem(int索引){
最终包装箱=蜂箱包装箱(“交付”);
框。删除(索引);
}
我想将索引参数更改为对象的id),如下所示
deleteItem(内部id){
最终包装箱=蜂箱包装箱(“交付”);
//框。删除(索引);
//在此处按id删除框
}
下面是我的TypeAdapter类:
@HiveType(类型ID:0)
课堂教学{
@HiveField(0)
最终int id;
交付(此.id);
}
将键值数据库视为一个有单词及其定义的常规良好旧词汇表。它允许您使用给定的单词快速找到定义(假设您正在查找单词大象)。但是,如果您想找到一个定义为“大耳朵动物”的条目,则需要花费更长的时间
经过大量简化,键值数据库就是这样工作的使用索引进行查询时,它们的速度很快。
因此,如果您想使用id进行查询,我建议在索引本身中使用id
例如:
Indexes:
delivery-001
delivery-002
...
或者,如果您还想执行一些其他更复杂的查询,我建议使用一个常规的SQLite数据库。将键值数据库想象为一个常规的良好的旧词汇表,其中包含单词及其定义。它允许您使用给定的单词快速找到定义(假设您正在查找单词大象)。但是,如果您想找到一个定义为“大耳朵动物”的条目,则需要花费更长的时间
经过大量简化,键值数据库就是这样工作的使用索引进行查询时,它们的速度很快。
因此,如果您想使用id进行查询,我建议在索引本身中使用id
例如:
Indexes:
delivery-001
delivery-002
...
或者,如果您还想执行一些其他更复杂的查询,我建议使用常规的SQLite数据库。如另一个答案中所述,这是不可能的,除非您搜索每个项目并逐个比较它们的ID。根据盒子中ITEN的数量,这可能需要更长的时间,或者根本不重要
这种未优化方式的一个例子是:
deleteItem(int id) {
final box = Hive.box<Delivery>("deliveries");
final Map<dynamic, Delivery> deliveriesMap = box.toMap();
dynamic desiredKey;
deliveriesMap.forEach((key, value){
if (value.id == id)
desiredKey = key;
});
box.delete(desiredKey);
}
deleteItem(内部id){
最终包装箱=蜂箱包装箱(“交付”);
最终地图交付Map=box.toMap();
动态期望密钥;
deliveriesMap.forEach((键,值){
if(value.id==id)
desiredKey=密钥;
});
框。删除(desiredKey);
}
这段代码的作用是使用。有了一张地图,我们就遍历地图上的每个条目,检查哪个条目有特定的ID,并记录下来。之后,我们只需使用删除找到的密钥。您可以阅读有关在地图中迭代的更多信息
请记住,这只是一个例子。如果您尝试使用此选项,您可能需要检查是否确实存在具有您正在搜索的ID的项目。如果是这种情况,您还需要检查框中具有相同ID的多个值。如另一个答案中所述,这是不可能的,除非您搜索每个项目并逐个比较它们的ID。根据盒子中ITEN的数量,这可能需要更长的时间,或者根本不重要
这种未优化方式的一个例子是:
deleteItem(int id) {
final box = Hive.box<Delivery>("deliveries");
final Map<dynamic, Delivery> deliveriesMap = box.toMap();
dynamic desiredKey;
deliveriesMap.forEach((key, value){
if (value.id == id)
desiredKey = key;
});
box.delete(desiredKey);
}
deleteItem(内部id){
最终包装箱=蜂箱包装箱(“交付”);
最终地图交付Map=box.toMap();
动态期望密钥;
deliveriesMap.forEach((键,值){
if(value.id==id)
desiredKey=密钥;
});
框。删除(desiredKey);
}
这段代码的作用是使用。有了一张地图,我们就遍历地图上的每个条目,检查哪个条目有特定的ID,并记录下来。之后,我们只需使用删除找到的密钥。您可以阅读有关在地图中迭代的更多信息
请记住,这只是一个例子。如果您尝试使用此选项,您可能需要检查是否确实存在具有您正在搜索的ID的项目。如果是这种情况,您还需要检查框中具有相同ID的多个值。但我认为您的值可以复制,您可以使用迭代器和If语句来实现这一点,如:value==“Hello”
,然后从列表中删除该值。但我认为您的值可以复制,你可以使用迭代器和if语句,比如:value==“Hello”
,然后从列表中删除该值。好的,如果这是唯一的选项,我将迭代每个框的值。谢谢,如果这是唯一的选择,我将迭代每个框的值。谢谢