带有CSV文件的Powershell随机团队生成器
我正在使用一个脚本,该脚本应该导入我的csv文件,并在一个团队中随机放置3个人,并创建尽可能多的团队 我可以导入我的csv文件,但是我对如何从这一点开始处理感到非常困惑 我知道不多,但我需要帮助才能开始带有CSV文件的Powershell随机团队生成器,powershell,data-partitioning,Powershell,Data Partitioning,我正在使用一个脚本,该脚本应该导入我的csv文件,并在一个团队中随机放置3个人,并创建尽可能多的团队 我可以导入我的csv文件,但是我对如何从这一点开始处理感到非常困惑 我知道不多,但我需要帮助才能开始 $users = import-csv "C:\Users\Bruger\Dokumenter\Esport_liste.csv" Write-Host $users 我的CSV看起来像这样: 一个可能的解决方案是: $users = import-csv "C:\Users\Bruger\D
$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人团队,这可能更公平
总之,@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看起来怎么样?@TobyU请看我的编辑。一些事情:1。导入时不要使用
Write Host
。函数将导入的csv转换为字符串,这不是您想要的。2.查看中的-循环:3。对于随机部分,请查看Get random
4。csv更像一个文本文件,而不是一个真正的csv。如果您使用的是没有标题的.csv文件,请深入了解import csv
的工作原理。可能与@JamesC重复。当然是相关的,但链接的问题只涵盖了这里被问到的部分内容:这里添加的元素是希望用随机选择的输入元素创建固定大小的块。谢谢工作得很有魅力!如果我想添加像团队1、团队2、团队3之类的内容。如何将其合并到代码中?我已经添加了团队名称。这是一个很好的开始,可以很好地显示团队将是什么样的,但它不会为团队创建数据结构<代码>…|排序对象{Get Random}
是一种对未知大小的集合进行洗牌的优雅方法,但是如果集合大小事先已知,…|获取随机计数
要快得多。不过,使用小的输入阵列并不重要。