Уникальные названия из 2 файлов - PullRequest
0 голосов
/ 15 мая 2019

Я знаю, что подобные вопросы задавались довольно много раз раньше, но во всех исследованиях, которые я проводил в Интернете, все, что я смог найти, это вопросы о получении уникальных комбинаций из одного массива и так далее, но что я могу сделать, но то, что яя ищу немного по-другому.

У меня есть скрипт, который генерирует имена, получая имена из txt.file и фамилии из другого, а затем случайным образом создает имя, скрипт также генерирует дубликаты, поэтому ябыло интересно, как я могу получить количество всех возможных уникальных комбо?Учитывая, что каждый text.file имеет 20 элементов (файл фамилий содержит 20 элементов.

, это мой сценарий:

$FirstName = Import-Csv C:\Users\myuser\Desktop\Firstname.txt -Delimiter ';' -Header Name, Gender
$LastName = Get-Content  C:\Users\myuser\Desktop\Lastnames.txt
[array]$FirstNameMan = $null
[array]$FirstNameWoman = $null



[int]$NumberOfCombinations = Read-Host 'Enter the number of combinations you wish'
[string]$Gender = Read-Host 'Gender: Enter "M" for "man" or "W" for "woman"'

# here i split the names by gender
for ($i = 0; $i -lt $FirstName.Count; $i++) {
if ($FirstName[$i].Gender -like 'mann') {
    $FirstNameMan += $FirstName[$i].Name
}
else {
    $FirstNameWoman += $FirstName[$i].Name
}
}
#random join
  For ($j = 0; $j -lt $NumberOfCombinations; $j++) {
if ($Gender -like 'm') {
    $FirstNameMan[(Get-Random $FirstNameMan.Count)] + ', ' + $Lastname[(Get-Random $Lastname.Count)] 
}
else { 
    $FirstNameWoman[(Get-Random $FirstNameWoman.Count)] + ', ' + $Lastname[(Get-Random $Lastname.Count)] 
}
}

результат будет примерно таким (в зависимости от выбранного пола):

Katja, Schult
Mary, Krüger
Ruth, Meier
Ruth, Bauer
Katja, Bauer
Katja, Schneider
Mascha, Möller
Ruth, Schröder
Sara, Meier

теперь, как я могу узнать, сколько возможных уникальных комбинаций может быть? ( не уникальным будет, если вы дважды получаете одно и то же имя, в противном случае оно уникально)я думаю, что просто не могу найти логику, чтобы выяснить алгоритм

извините, если это слишком субъективно

1 Ответ

1 голос
/ 15 мая 2019

Создать все уникальные комбинации из двух уникальных списков так же просто, как написать вложенный цикл:

$AllMaleNames = foreach($first in $FirstNameMan){
    foreach($last in $Lastname){
        "$first, $last"
    }
}

$AllFemaleNames = foreach($first in $FirstNameWoman){
    foreach($last in $Lastname){
        "$first, $last"
    }
}

Теперь вы можете выбрать из этих списков:

if($Gender -like 'm') {
  $NamesToPickFrom = $AllMaleNames
}
else {
  $NamesToPickFrom = $AllFemaleNames
}

$NamesToPickFrom | Get-Random -Count $NumberOfCombinations
...