从 CSV 文件中将随机用户添加到组

Add random users to groups from CSV file

我有一个问题,我正在将 csv 文件中的用户添加到某些组中,在此示例中。这是MAX。 3 users/group。但我想要的是,我有 10 个组,然后将 csv 文件中的随机用户添加到组中,然后我可能得到 7 个组,每个组有 4 个用户,最后 3 个组有 3 个用户,就是这样好的

但是我如何更改此脚本,从仅添加 3 个 users/group 到将用户添加到 "hardcoded" 10 个组,从 csv 文件?

自动取款机。我得到这个:

$deltager = Import-Csv C:\Users\Desktop\liste.csv

$holdstr = 3

$maxTeams = [math]::ceiling($deltager.Count/$holdstr)


$teams = @{}


$shuffled = $deltager | Get-Random -Count $deltager.Count


$shuffled | ForEach-Object { $i = 1 }{

$teams["$([Math]::Floor($i / $holdstr))"] += @($_.Navn)

$i++

}


$Grupper = $teams | Out-String

Write-Host $Grupper

使用 remainder/modulo 运算符 % 到 "wrap around" 组索引,然后一次添加一个用户以获得最佳分配:

# define number of groups
$numberOfTeams = 10

# read participant records from csv
$participants = Import-Csv C:\Users\Desktop\liste.csv

# create jagged array for the team rosters
$teams = ,@() * $numberOfTeams

# go through participant list, add to "next" group in line
$index = 0
$participants |%{
  $teams[$index++ % $numberOfTeams] += @($_.Navn)
}

如果您想随机安排参与者的顺序,只需在填充组之前随机排序列表即可:

$participants = Import-Csv C:\Users\Desktop\liste.csv |Sort-Object {Get-Random}

$teams中的每一项都是另一个名称数组,因此要枚举它们:

0..$teams.Length |%{
  Write-Host "Team $($_+1):" $($teams[$_] -join ', ')
}