gpt4 book ai didi

flutter - Dart:获取列表 2 中元素的索引(列表 1 中的元素)

转载 作者:行者123 更新时间:2023-12-03 02:53:03 33 4
gpt4 key购买 nike

我在 DART 中有 2 个列表

list 1:选定的用户

[{'name': name1, id:'123'}, {'name': name1, id:'123'})]

列表 2:所有用户

[{'name': name1, id:'123'}, {'name': name1, id:'123'}) .... (much longer)]

我想知道 LIST 2 中 LIST 1 的每个选定用户的索引。这可能吗?

我尝试了 indexWhere 方法。但我不断收到错误:

error: The method 'contains' isn't defined for the class 'Map'.

最佳答案

如果您的列表中的结构是在某些情况下定义为等式运算符被覆盖的对象,您可以这样做:

class User {

String name;
String id;

User(this.name, this.id);

@override
int get hashCode => name.hashCode ^ id.hashCode;

bool operator == (o) => name == o.name && id == o.id;

@override
toString() {
return "$name:$id";
}

}

void main() {
var list = [User("name1", "123") , User("name4", "888")];
var list2 = [User("name1", "123") , User("name2", "234"), User("name3", "666"), User("name4", "888")];

list.forEach((element) {
print(list2.indexOf(element));
});
}

这将打印出所选用户的所有索引键(在我的例子中)。也许有一个更优雅的解决方案,但它确实有效。使用 indexWhere() 你应该能够提供相等比较作为函数本身的闭包,如:

  list.forEach((element) {
print(list2.indexWhere((user) => user.name == element.name && user.id == element.id));
});

有了这个,您可以在用户类中省略运算符和哈希码覆盖。

如果您没有类(class),这也应该有效:

void main() {
var list = [{"name": "name1", "id": "123"} , {"name": "name4", "id": "888"}];
var list2 = [{"name": "name1", "id": "123"} , {"name": "name2", "id": "234"}, {"name": "name3", "id": "666"}, {"name": "name4", "id": "888"}];

list.forEach((element) {
print(list2.indexWhere((innerElement) => innerElement["name"] == element["name"] && innerElement["id"] == element["id"]));
});
}

关于flutter - Dart:获取列表 2 中元素的索引(列表 1 中的元素),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58671806/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com