我的行串列:
List rowlist = [Student(name: 'John',age: 12),
Student(name: 'Kity',age: 13),
Student(name: 'Micle',age: 14),
Student(name: 'Jack',age: 12),
Student(name: 'Cha',age: 13),
Student(name: 'Duc',age: 13),
Student(name: 'Ran',age: 12)]
預期結果:
List result = [
[
Student(name: 'John',age: 12),
Student(name: 'Jack',age: 12),
Student(name: 'Ran',age: 12),
],
[
Student(name: 'Kity',age: 13),
Student(name: 'Cha',age: 13),
Student(name: 'Duc',age: 13),
],
[
Student(name: 'Micle',age: 14),
]
]
我需要創建串列的一個新的串列,其中每個串列是通過添加Student與age欄位等于。結果的最佳方式是什么?
uj5u.com熱心網友回復:
如果使用收藏包。您可以使用該groupListsBy方法將所有學生按年齡分組。
Map<int, List<Student>> result = rowlist.groupListsBy((student) => student.age);
但是,以上將資料作為Map<int, List<Student>. 您可以List<List<Student>>通過呼叫將其轉換為 a .values.toList()。
List<List<Student>> result = rowlist.groupListsBy((student) => student.age).values.toList();
完整示例:
import 'package:collection/collection.dart';
void main() {
List<Student> rowlist = [
Student(name: 'John', age: 12),
Student(name: 'Kity', age: 13),
Student(name: 'Micle', age: 14),
Student(name: 'Jack', age: 12),
Student(name: 'Cha', age: 13),
Student(name: 'Duc', age: 13),
Student(name: 'Ran', age: 12),
];
List<List<Student>> result =
rowlist.groupListsBy((student) => student.age).values.toList();
print(result);
}
class Student {
final String name;
final int age;
const Student({required this.name, required this.age});
@override
String toString() => 'Student(name: $name, age: $age)';
}
uj5u.com熱心網友回復:
您也可以在沒有任何包的情況下執行此操作。
List rowlist = [
Student(name: 'John', age: 12),
Student(name: 'Kity', age: 13),
Student(name: 'Micle', age: 14),
Student(name: 'Jack', age: 12),
Student(name: 'Cha', age: 13),
Student(name: 'Duc', age: 13),
Student(name: 'Ran', age: 12)
];
void main() {
Map<int, List<Student>> groupMap = {};
for (final s in rowlist) {
if (groupMap.containsKey(s.age)) {
groupMap[s.age]!.add(s);
} else {
groupMap[s.age] = [s];
}
}
final result = groupMap.entries.map((e) => e.value).toList();
print(result);
}
class Student {
Student({required this.name, required this.age});
final String name;
final int age;
@override
String toString() => '$name - $age';
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/395288.html
下一篇:無法從方法“onGenerateRoute”回傳“Null”型別的值,因為它的回傳型別為“Route<dynamic>”
