带有 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