powershell - 带有 CSV 文件的 Powershell 随机团队生成器
问题描述
我正在使用一个脚本,该脚本应该导入我的 csv 文件,并随机将 3 个人放入一个团队中,并组成与玩家数量一样多的团队。
我可以导入我的 csv 文件,但我对如何从这一点进行处理非常迷茫。
我知道这不是很多,但我需要帮助才能开始。
$users = import-csv "C:\Users\Bruger\Dokumenter\Esport_liste.csv"
Write-Host $users
解决方案
这是一种可能的解决方案:
假设您有一个这样的 CSV:
Player
David
Mary
Thomas
Alice
Michael
Gordon
Gary
Hannah
Sally
Richard
Colin
Emma
Paige
John
Alex
然后您可以从中获得一些随机团队,如下所示:
$players = Import-Csv .\players.csv
$teamSize = 3
$maxTeams = [math]::Floor($players.Count/$teamSize)
$teams = @{}
$shuffled = $players | Get-Random -Count $players.Count
$shuffled |
ForEach-Object { $i = 0 }{
$teams["$($i % $maxTeams)"] += @($_.Player)
$i++
}
这导致类似于以下的哈希表:
Name Value
---- -----
0 {Alice, David, Mary}
1 {Gordon, Colin, John}
2 {Emma, Paige, Thomas}
3 {Alex, Hannah, Richard}
4 {Sally, Michael, Gary}
$teamSize
如果您需要每支球队中更多或更少的球员,请调整。
编辑: 根据@mklement0 的评论进行更新。以上内容并不准确,因为它并不总是提供与原始要求相匹配的团队规模。例如,对于 22 名玩家的列表:
TeamSize Teams
-------- -----
1 1 x22
2 2 x11
3 3 x6 / 4 x1
4 4 x3 / 5 x2
5 5 x2 / 6 x2
6 7 x2 / 8 x1
7 7 x2 / 8 x1
8 11 x2
9 11 x2
$teamSize
但是,如果不是太接近总数的一半,它确实会产生更均衡的团队。例如,对于 5 人的严格团队规模,您最终会得到 4 支 5 人队伍和 1 支 2 人队伍,根据场景的不同,这可能会造成太多的不匹配,但这会产生 2 支 5 人和 2 人的队伍6,这可能是“更公平”。
无论如何,@mklement0 的增强功能会更严格地遵守要求。这是代码:
$players = Import-Csv .\players.csv
$teamSize = 3
$maxTeams = [math]::Ceiling($players.Count/$teamSize)
$teams = @{}
$shuffled = $players | Get-Random -Count $players.Count
$shuffled |
ForEach-Object { $i = 0 }{
$teams["$([Math]::Floor($i / $teamSize))"] += @($_.Player)
$i++
}
为了比较,这里是产生的团队:
TeamSize Teams
-------- -----
1 1 x22
2 2 x11
3 3 x7 / 1 x1
4 5 x4 / 2 x1
5 5 x4 / 2 x1
6 6 x3 / 4 x1
7 7 x3 / 1 x1
8 8 x2 / 6 x1
9 9 x2 / 4 x1
推荐阅读
- vba - 在运行时将用户窗体添加到不同的工作簿
- mysql - 如何在 Mysql 5.7 中更新 JSON 数组中的特定对象
- javascript - 无法读取 if 中未定义的属性
- c++ - 将 VkMainWindow 保持在底部
- alexa - 在本地 Echo 上测试 Alexa Skill
- excel - Excel VBA:更改一行代码后无法超过正确的值
- ios - 上传到 Firebase 时出现元数据异常 - ios - 目标 c
- upload - AppMaker 和选择器小部件 - 上传到特定文件夹
- python - 如何从 argparse 的输入中获取字符串并将其用作对象
- r - 尽管函数在包中,但“找不到函数”错误