带有CSV文件的Powershell随机团队生成器

时间:2018-11-14 10:02:23

标签: powershell data-partitioning

我正在使用一个脚本,该脚本应该导入我的csv文件,并随机将3个人放在一个团队中,并且使团队数量尽可能多。

我可以导入csv文件,但是从那时起我对如何处理非常迷茫。

我知道不是很多,但是我需要帮助才能开始。

$users = import-csv "C:\Users\Bruger\Dokumenter\Esport_liste.csv"
Write-Host $users

我的CSV如下所示: enter image description here

2 个答案:

答案 0 :(得分:3)

这是一种可能的解决方案:

说,您有这样的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人的严格团队规模,您最终会得到5人组成的4个团队和2人组成的1个团队,根据情况的不同,可能会有太多的不匹配,但这会导致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

答案 1 :(得分:0)

可能的解决方案是:

.waitForElementVisible('#element', 1000, 'Looking for something on some page')

我不会进一步解释。尝试理解它,并在评论中询问是否需要进一步的帮助。