Добавить случайных пользователей в группы из файла CSV - PullRequest
0 голосов
/ 16 июня 2020

У меня вопрос, я добавляю пользователей из файла csv в некоторые группы, в этом примере. это МАКС. 3 пользователя на группу. Но я хочу, чтобы у меня было 10 групп, а затем я добавлял случайных пользователей из файла csv в группы, затем, возможно, я получил 7 групп с 4 пользователями, а затем последние 3 с 3 пользователями, и все в порядке.

Но как мне изменить этот сценарий, от простого добавления 3 пользователей / группу к добавлению пользователей в «жестко запрограммированные» 10 групп из файла csv?

ATM. Получил это:

$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

1 Ответ

2 голосов
/ 16 июня 2020

Используйте оператор остатка / по модулю %, чтобы «обернуть» индекс группы, затем просто добавляйте по одному пользователю за раз для оптимального распределения:

# 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 ', ')
}
...