我在下面发布了一些伪代码。你必须修改它以适应 Swift 语法 (我现在不在 Mac 上,我把它扔到操场上回家后会编辑它。)
func generate2DArray(players: Array<Player>, numTeams: Int) -> Array<Array<String>>{
var teams = Array<Array<Player>>()
for index in 0...numTeams{
//init the first dimension of empty arrays for each team
teams.append([Player]())
}
for var i = 0; i < players.count; ++i{
//Place the player in the correct team respectively... (sorry about array syntax, I know its wrong)
teams[i % numTeams].append(players[i]);
}
return teams;
}
基本的想法是你知道你想要多少个团队,你可以用一个简单的 for 循环来初始化你的二维数组的第一个维度。
然后将球员放在各自的球队中,只需使用神奇的模数即可。
理论
- 玩家 1 % 4 队 = 属于第 1 队。
- 玩家 2 % 4 队 = 属于第 2 队
- 玩家 3 % 4 队 = 属于第 3 队。
- 玩家 4 % 4 队 = 属于第 0 队。
- 玩家 5 % 4 队 = 属于第 1 队。
- 玩家 6 % 4 队 = 属于第 2 队。
- 玩家 7 % 4 队 = 属于第 3 队。
- 玩家 8 % 4 队 = 属于第 0 队。
(由于 4 % 4 为 0,您将不得不偏移您的数组,或者提供一些简单的逻辑来涵盖这种情况,最简单的方法是使用团队 0 而不是团队 4)
更新
刚刚注意到您希望它们按玩家评分平均分配。在这种情况下,只需确保在将他们放入团队之前按他们的评分对玩家进行排序(我将省略展示如何做到这一点,假设你知道如何在 Swift 中对数组进行排序,如果有帮助请评论需要。)
更新
我测试了我添加的代码并进行了一些修改,以便它在 Swift 中正常运行
这是预期的结果
generate2DArray([player1, player2, player3, player4, player5, player6], 2)
//Returns [player1, player3, player5] , [player2, player4, player6]
generate2DArray([player1, player2, player3, player4, player5, player6], 4)
//Returns [player1, player5] , [player2, player6] , [player3] , [player4]