如何在另一个组列表 (groupby) 中实现组列表。是否可以在飞镖自定义中使用多个哈希码和运算符== object
How to implement group list inside another group list (groupby). Is it possible to use multiple hashcode and operator== in a dart custom object
class People {
final String id;
final String title;
final String name;
final String location;
final String email;
final String lga;
People({
@required this.id,
@required this.title,
@required this.name,
@required this.location,
this.email,
this.lga,
});
factory People.fromJson(Map<String, dynamic> json) => People(
id: json["id"],
title: json["title"],
name: json["name"],
location: json["location"],
email: json["email"],
lga: json["lga"],
);
Map<String, dynamic> toJson() => {
"id": id,
"title": title,
"name": name,
"location": location,
"email": email,
"lga": lga,
};
@override
bool operator ==(o) =>
o is Priest && townOrigin == o.townOrigin && lga == o.lga;
@override
int get hashCode => town.hashcode ^ lga.hashcode;
这在 town 或 lga 之间的 listView 中是可能的,但我的问题是,我想在位置中实现这些 equals 和 hashCode
,在另一个 ListView 中有所不同。
为了简单起见,很多人都在同一地点,但我只需要一个地点,来自同一地点的许多人(作为 header)在下面重复他们的名字。
有什么帮助吗?
[
{
"id": "1",
"name": "Ada Kenneth Kenechukwu",
"location": "Awka",
"townOrigin": "Nimo",
"phone": "080633",
"lga": "Njikoka",
},
{
"id": "2",
"name": "Ugo John",
"location": "Awka",
"townOrigin": "Nimo",
"phone": "08057763",
"lga": "Njikoka",
},
{
"id": "3",
"name": "Okafor Kenneth Kenechukwu",
"location": "Awka",
"townOrigin": "Ukpo",
"phone": "0806363",
"lga": "Dunukofia",
},
{
"id": "4",
"name": "Ndu Agi",
"location": "Awka",
"townOrigin": "Ukpo",
"phone": "0806763",
"lga": "Dunukofia",
},
{
"id": "5",
"name": "Mma Peter",
"location": "Awka",
"townOrigin": "Ichida",
"phone": "08057763",
"lga": "Anaocha",
},
{
"id": "6",
"name": "Eze Peter",
"location": "Awka",
"townOrigin": "Ichida",
"phone": "0806345",
"lga": "Anaocha",
}
]
当你看这个的时候,有些地方有相同的位置,townOrigin,lga。我的应用程序中有三个 listView 页面,它将分别显示来自同一位置、townOrigin、lga 的所有那些(名称)。仅显示名称但使用一个元素(如位置中的 Awka)作为 subhead.The 同样适用于所有 townOrigin 和 lga。期待帮助。
我得到了更好的东西,但还没有解决我所有的问题,
使用此包 sticky_grouped_list、https://pub.dev/packages/sticky_grouped_list
我想要一个群中群。我得到了一组 lga,但仍在 lga 组中。
如何将像“Uga”这样来自同一地点的人合并为一个。
您可以尝试添加如下内容:
extension GroupingBy on Iterable<dynamic> {
Map<String, List<dynamic>> groupingBy(String key){
var result = <String, List<dynamic>>{};
for(var element in this){
result[element[key]] = (result[element[key]] ?? [])..add(element);
}
return result;
}
}
这样您就可以按特定字段对数据元素进行分组。
首先,将您的数据放入列表中:
var people = [
{
"id": "1",
"name": "Ada Kenneth Kenechukwu",
"location": "Awka",
"townOrigin": "Nimo",
"phone": "080633",
"lga": "Njikoka",
},
{
"id": "2",
"name": "Ugo John",
"location": "Awka",
"townOrigin": "Nimo",
"phone": "08057763",
"lga": "Njikoka",
},
{
"id": "3",
"name": "Okafor Kenneth Kenechukwu",
"location": "Awka",
"townOrigin": "Ukpo",
"phone": "0806363",
"lga": "Dunukofia",
},
{
"id": "4",
"name": "Ndu Agi",
"location": "Awka",
"townOrigin": "Ukpo",
"phone": "0806763",
"lga": "Dunukofia",
},
{
"id": "5",
"name": "Mma Peter",
"location": "Awka",
"townOrigin": "Ichida",
"phone": "08057763",
"lga": "Anaocha",
},
{
"id": "6",
"name": "Eze Peter",
"location": "Awka",
"townOrigin": "Ichida",
"phone": "0806345",
"lga": "Anaocha",
},
{
"id": "7",
"name": "New Person",
"location": "Somewhere else",
"townOrigin": "idk",
"phone": "694201738",
"lga": "Mystery",
}
];
现在,如果您想按位置对它们进行分组,您可以像这样简单地进行操作:
var peopleByLocation = people.groupingBy('location');
var awka = peopleByLocation['Awka']; //List of all people with a 'location' : 'Awka'
var somewhereElse = peopleByLocation['Somewhere else'];
这是一个 link 在 dartpad 中稍作修改的版本,您可以使用它:https://dartpad.dev/8a53fc2eb4f63d904f414ea528574baf
class People {
final String id;
final String title;
final String name;
final String location;
final String email;
final String lga;
People({
@required this.id,
@required this.title,
@required this.name,
@required this.location,
this.email,
this.lga,
});
factory People.fromJson(Map<String, dynamic> json) => People(
id: json["id"],
title: json["title"],
name: json["name"],
location: json["location"],
email: json["email"],
lga: json["lga"],
);
Map<String, dynamic> toJson() => {
"id": id,
"title": title,
"name": name,
"location": location,
"email": email,
"lga": lga,
};
@override
bool operator ==(o) =>
o is Priest && townOrigin == o.townOrigin && lga == o.lga;
@override
int get hashCode => town.hashcode ^ lga.hashcode;
这在 town 或 lga 之间的 listView 中是可能的,但我的问题是,我想在位置中实现这些 equals 和 hashCode
,在另一个 ListView 中有所不同。
为了简单起见,很多人都在同一地点,但我只需要一个地点,来自同一地点的许多人(作为 header)在下面重复他们的名字。
有什么帮助吗?
[
{
"id": "1",
"name": "Ada Kenneth Kenechukwu",
"location": "Awka",
"townOrigin": "Nimo",
"phone": "080633",
"lga": "Njikoka",
},
{
"id": "2",
"name": "Ugo John",
"location": "Awka",
"townOrigin": "Nimo",
"phone": "08057763",
"lga": "Njikoka",
},
{
"id": "3",
"name": "Okafor Kenneth Kenechukwu",
"location": "Awka",
"townOrigin": "Ukpo",
"phone": "0806363",
"lga": "Dunukofia",
},
{
"id": "4",
"name": "Ndu Agi",
"location": "Awka",
"townOrigin": "Ukpo",
"phone": "0806763",
"lga": "Dunukofia",
},
{
"id": "5",
"name": "Mma Peter",
"location": "Awka",
"townOrigin": "Ichida",
"phone": "08057763",
"lga": "Anaocha",
},
{
"id": "6",
"name": "Eze Peter",
"location": "Awka",
"townOrigin": "Ichida",
"phone": "0806345",
"lga": "Anaocha",
}
]
当你看这个的时候,有些地方有相同的位置,townOrigin,lga。我的应用程序中有三个 listView 页面,它将分别显示来自同一位置、townOrigin、lga 的所有那些(名称)。仅显示名称但使用一个元素(如位置中的 Awka)作为 subhead.The 同样适用于所有 townOrigin 和 lga。期待帮助。
我得到了更好的东西,但还没有解决我所有的问题, 使用此包 sticky_grouped_list、https://pub.dev/packages/sticky_grouped_list
我想要一个群中群。我得到了一组 lga,但仍在 lga 组中。
如何将像“Uga”这样来自同一地点的人合并为一个。
您可以尝试添加如下内容:
extension GroupingBy on Iterable<dynamic> {
Map<String, List<dynamic>> groupingBy(String key){
var result = <String, List<dynamic>>{};
for(var element in this){
result[element[key]] = (result[element[key]] ?? [])..add(element);
}
return result;
}
}
这样您就可以按特定字段对数据元素进行分组。
首先,将您的数据放入列表中:
var people = [
{
"id": "1",
"name": "Ada Kenneth Kenechukwu",
"location": "Awka",
"townOrigin": "Nimo",
"phone": "080633",
"lga": "Njikoka",
},
{
"id": "2",
"name": "Ugo John",
"location": "Awka",
"townOrigin": "Nimo",
"phone": "08057763",
"lga": "Njikoka",
},
{
"id": "3",
"name": "Okafor Kenneth Kenechukwu",
"location": "Awka",
"townOrigin": "Ukpo",
"phone": "0806363",
"lga": "Dunukofia",
},
{
"id": "4",
"name": "Ndu Agi",
"location": "Awka",
"townOrigin": "Ukpo",
"phone": "0806763",
"lga": "Dunukofia",
},
{
"id": "5",
"name": "Mma Peter",
"location": "Awka",
"townOrigin": "Ichida",
"phone": "08057763",
"lga": "Anaocha",
},
{
"id": "6",
"name": "Eze Peter",
"location": "Awka",
"townOrigin": "Ichida",
"phone": "0806345",
"lga": "Anaocha",
},
{
"id": "7",
"name": "New Person",
"location": "Somewhere else",
"townOrigin": "idk",
"phone": "694201738",
"lga": "Mystery",
}
];
现在,如果您想按位置对它们进行分组,您可以像这样简单地进行操作:
var peopleByLocation = people.groupingBy('location');
var awka = peopleByLocation['Awka']; //List of all people with a 'location' : 'Awka'
var somewhereElse = peopleByLocation['Somewhere else'];
这是一个 link 在 dartpad 中稍作修改的版本,您可以使用它:https://dartpad.dev/8a53fc2eb4f63d904f414ea528574baf