Как отсортировать массив для уже существующих имен и добавить объекты из этих имен в исходное имя - PullRequest
0 голосов
/ 02 мая 2019

У меня в настоящее время есть массив в Powershell, предоставляющий мне список пользователей с определенными объектами (информация).Есть несколько экземпляров определенных пользователей, но с различной прикрепленной информацией.Я хочу добавить эту информацию, чтобы при поиске определенного элемента / имени в массиве он возвращался со всей информацией.

Так скажем, например, у меня есть три array.name, все равные Джону.Но каждый экземпляр имеет разные адреса.Я хочу добавить эти разные адреса вместе, чтобы у меня было одно имя array.name, равное Джону, но к нему прикреплены три разных адреса.

Я пробовал цикл внутри цикла и создавал новый массив, пытаясь сравнитьчто у меня уже есть с новым массивом.Но это не работает и выдает бесконечный список.

$arr3 += $arr2[0]

For ($a=0; $a -le ($arr2.length - 1); $a++) {
    $temp3 = $arr2[$a].managedBy
    if ($temp3 -eq $null){
        $temp3 = "none"
    }
    For ($b=0; $b -le ($arr3.length - 1); $b++) {
        if ($temp3 -eq $arr3[$b].managedBy) {
            $arr3[$b].name += "`n"
            $arr3[$b].name += $arr2[$a].name
            $arr3[$b].description += "`n"
            $arr3[$b].description += $arr2[$a].description
            $arr3[$b].info += "`n"
            $arr3[$b].info += $arr2[$a].info
        } else {
            $arr3 += $arr2[$a]
        }
    }
}

У меня должен быть arr3 со списком managedBy, который не повторяется, но с дополнительной информацией, прикрепленной в некоторых случаях.Это не работает и в конечном итоге выбрасывает огромный бесконечный массив.

1 Ответ

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

Применяя предложения Lee_Daily, вы можете сделать следующее:

$arr3 = $arr2 | Group-Object ManagedBy |
   select @{n='ManagedBy';e={$_.Name}},@{n='Name';e={$_.group.Name -join ";"}},
   @{n='description';e={$_.group.description -join ";"}},
   @{n='info';e={$_.group.info -join ";"}}

Этот код группирует имена, которые идентичны, в одну строку вывода, используя Group-Object. Свойство .Group содержит остальные свойства объектов $ arr2. Все свойства объекта массива хранятся в свойстве .group вывода Group-Object, поэтому для доступа к ним необходимо использовать вложенные свойства ($_.group.property). Я исключил ManagedBy. Я использую оператор -join, чтобы объединить все значения одного свойства с разделителем точки с запятой.

Чтобы настроить этот код для вашей ситуации, вы можете изменить следующее, так как вам может потребоваться поменять свойства для достижения желаемого эффекта:

  1. Group-Object ManagedBy: Вы можете использовать другое свойство, кроме ManagedBy. Это должно быть свойство, содержащее повторяющиеся значения в вашем массиве, которое вы хотите уменьшить до одной записи.
  2. Select @{n=...;e={...}}: свойство, по которому вы группируете (в данном случае ManagedBy), сопоставляется со свойством .name вывода Group-Object. Остальные заголовки и значения в хеш-таблице должны быть несколькими значениями, которые вы хотите объединить в одну строку. Значения хеш-таблицы должны исключать сгруппированное свойство.
  3. -join ";": это разделитель, который разделяет значения ваших общих свойств. Значение вашего информационного свойства будет в формате Info 1;Info 2;Info 3. Вы можете обновить этот разделитель.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...