带有 CSV 文件的 Powershell 随机团队生成器
Powershell random team generator with CSV file
我正在使用一个脚本来导入我的 csv 文件,并随机将 3 个人组成一个团队,并根据玩家的数量组成多个团队。
我可以导入我的 csv 文件,但我不知道如何从这一点开始处理。
我知道这不是很多,但我需要帮助才能开始。
$users = import-csv "C:\Users\Bruger\Dokumenter\Esport_liste.csv"
Write-Host $users
我的 CSV 看起来像这样:
一个可能的解决方案是:
$users = import-csv "C:\Users\Bruger\Dokumenter\Esport_liste.csv" -Header "User"
$i = 0
$team = 1
$users | Sort-Object { Get-Random } | foreach {
if(($i % 3) -eq 0){ " "; "Team $($team)"; $team++ }
$_.User
$i++
}
我就不多解释了。尝试理解它并在评论中询问是否需要进一步的帮助。
这是一种可能的解决方案:
比如说,你有这样的 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 个,可能是 'fairer'.
无论如何,@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
我正在使用一个脚本来导入我的 csv 文件,并随机将 3 个人组成一个团队,并根据玩家的数量组成多个团队。
我可以导入我的 csv 文件,但我不知道如何从这一点开始处理。
我知道这不是很多,但我需要帮助才能开始。
$users = import-csv "C:\Users\Bruger\Dokumenter\Esport_liste.csv"
Write-Host $users
我的 CSV 看起来像这样:
一个可能的解决方案是:
$users = import-csv "C:\Users\Bruger\Dokumenter\Esport_liste.csv" -Header "User"
$i = 0
$team = 1
$users | Sort-Object { Get-Random } | foreach {
if(($i % 3) -eq 0){ " "; "Team $($team)"; $team++ }
$_.User
$i++
}
我就不多解释了。尝试理解它并在评论中询问是否需要进一步的帮助。
这是一种可能的解决方案:
比如说,你有这样的 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 个,可能是 'fairer'.
无论如何,@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