gpt4 book ai didi

dart - 产生动态的小组成员

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

我要创建一个名为“Person Group Generator”的简单应用程序,它将根据要创建的人员列表和总组来生成组。例如,您有20个列表人,并希望从该列表中创建10个组,应用程序自动生成10个组,每个组有2个人。这就是我实现它的方式。

class Person {
final int id;
final String name;
Person({this.id, this.name});
}

List<Person> listPerson = [
Person(id: 1, name: 'Ani'),
Person(id: 2, name: 'Budi'),
Person(id: 3, name: 'Citra'),
Person(id: 4, name: 'Doni'),
Person(id: 5, name: 'Emilia'),
Person(id: 6, name: 'Frasisco'),
Person(id: 7, name: 'Goyu'),
Person(id: 8, name: 'Hani'),
Person(id: 9, name: 'Intan'),
Person(id: 10, name: 'Jeri'),
Person(id: 11, name: 'Karina'),
Person(id: 12, name: 'Lemi'),
Person(id: 13, name: 'Momo'),
Person(id: 14, name: 'Nini'),
Person(id: 15, name: 'Opi'),
Person(id: 16, name: 'Parto'),
Person(id: 17, name: 'Queen'),
Person(id: 18, name: 'Risa'),
Person(id: 19, name: 'Sisca'),
Person(id: 20, name: 'Toni'),
// Person(id: 21, name: 'Ucok'),
// Person(id: 22, name: 'Vani'),
// Person(id: 23, name: 'Wahyu'),
// Person(id: 24, name: 'Xixi'),
];


Map<String, List<Person>> generateGroup(
List<Person> values, {
int generateTotalGroup = 1,
}) {

var tempMap = <String, List<Person>>{};
var tempPersonList = <Person>[];
var totalPersonEveryGroup = 0.0;

final totalPerson = values.length;
values.shuffle();
if (totalPerson % generateTotalGroup == 0) {
totalPersonEveryGroup = values.length / generateTotalGroup;

for (int i = 1; i <= generateTotalGroup; i++) {
var nameGroup = "Group $i";
var selectedPerson = values
.getRange(tempPersonList.length,
tempPersonList.length + totalPersonEveryGroup.toInt())
.toList();

tempMap[nameGroup] = selectedPerson;

tempPersonList = [...tempPersonList, ...selectedPerson];
}
} else {
/// Question to StackOverflow
}

return tempMap;
}

void main() {
final result = generateGroup(listPerson, generateTotalGroup: 10);

result.forEach((key,listPerson){

listPerson.forEach((person){
print('key $key || person ${person.name}');
});

});
}

输出量
key Group 1 || person Emilia
key Group 1 || person Nini
key Group 2 || person Citra
key Group 2 || person Hani
key Group 3 || person Frasisco
key Group 3 || person Queen
key Group 4 || person Goyu
key Group 4 || person Risa
key Group 5 || person Karina
key Group 5 || person Intan
key Group 6 || person Lemi
key Group 6 || person Ani
key Group 7 || person Parto
key Group 7 || person Doni
key Group 8 || person Budi
key Group 8 || person Toni
key Group 9 || person Momo
key Group 9 || person Jeri
key Group 10 || person Sisca
key Group 10 || person Opi
如果总人数可以按所需总人数划分(20人/ 10组=每组2人),则应用结果是我的预期。但是问题是什么时候无法划分,我不知道如何处理它。
例如,总人数= 24,所需的总人数= 10,如果我将其除以2.4。我期望结果无法分割的结果是这样的:
期望
key Group 1 || person Ani
key Group 1 || person Budi
key Group 1 || person Citra
key Group 2 || person Doni
key Group 2 || person Emilia
key Group 2 || person Frasisco
key Group 3 || person Goyu
key Group 3 || person Hani
key Group 3 || person Intan
key Group 4 || person Jeri
key Group 4 || person Karina
key Group 4 || person Lemi
key Group 5 || person Momo
key Group 5 || person Nini
key Group 6 || person Opi
key Group 6 || person Parto
key Group 7 || person Queen
key Group 7 || person Risa
key Group 8 || person Sisca
key Group 8 || person Toni
key Group 9 || person Ucok
key Group 9 || person Vani
key Group 10 || person Wahyu
key Group 10 || person Xixi
如果不能将总人数除以总人数,我该如何做?
谢谢

最佳答案

尝试这样的事情:

class Person {
final int id;
final String name;
Person({this.id, this.name});
}

List<Person> listPerson = [
Person(id: 1, name: 'Ani'),
Person(id: 2, name: 'Budi'),
Person(id: 3, name: 'Citra'),
Person(id: 4, name: 'Doni'),
Person(id: 5, name: 'Emilia'),
Person(id: 6, name: 'Frasisco'),
Person(id: 7, name: 'Goyu'),
Person(id: 8, name: 'Hani'),
Person(id: 9, name: 'Intan'),
Person(id: 10, name: 'Jeri'),
Person(id: 11, name: 'Karina'),
Person(id: 12, name: 'Lemi'),
Person(id: 13, name: 'Momo'),
Person(id: 14, name: 'Nini'),
Person(id: 15, name: 'Opi'),
Person(id: 16, name: 'Parto'),
Person(id: 17, name: 'Queen'),
Person(id: 18, name: 'Risa'),
Person(id: 19, name: 'Sisca'),
Person(id: 20, name: 'Toni'),
Person(id: 21, name: 'Ucok'),
Person(id: 22, name: 'Vani'),
Person(id: 23, name: 'Wahyu'),
Person(id: 24, name: 'Xixi'),
];


Map<String, List<Person>> generateGroup(
List<Person> values, {
int generateTotalGroup = 1,
}) {

var tempMap = <String, List<Person>>{};
var tempPersonList = <Person>[];
var totalPersonEveryGroup = 0;

final totalPerson = values.length;
values.shuffle();
var extra = totalPerson % generateTotalGroup;

totalPersonEveryGroup = values.length ~/ generateTotalGroup;

for (int i = 1; i <= generateTotalGroup; i++) {
var end = totalPersonEveryGroup;
if (extra > 0) {
extra--;
end++;
}

var nameGroup = "Group $i";
var selectedPerson = values
.getRange(tempPersonList.length,
tempPersonList.length + end)
.toList();

tempMap[nameGroup] = selectedPerson;

tempPersonList = [...tempPersonList, ...selectedPerson];
}

return tempMap;
}

void main() {
final result = generateGroup(listPerson, generateTotalGroup: 10);

result.forEach((key,listPerson){

listPerson.forEach((person){
print('key $key || person ${person.name}');
});

});
}

关于dart - 产生动态的小组成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64656704/

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