Поместите это здесь, поскольку у него есть код и, следовательно, он слишком длинный для секции комментариев.
Но ... но «пользователь b» находится в обеих неделях, но по разным адресам. В обычной мысли это два разных человека, потому что их место жительства находится в двух разных местах. Итак, ваш конечный результат, к которому вы стремитесь, если это так, недействителен.
Clear-Host
@(
@{
week = '2020-05'
participants = @(
@{
name = 'user A'
age = 35
address = 'city A'
},
@{
name = 'user B'
age = 16
address = 'city B'
}
)
},@{
week = '2020-04'
participants = @(
@{
name = 'user A'
age = 35
address = 'city A'
},
@{
name = 'user B'
age = 16
address = 'city A'
},
@{
name = 'user C'
age = 42
address = 'city B'
}
)
}
) |
ConvertTo-Json -Depth 3 |
ConvertFrom-Json |
Select -ExpandProperty SyncRoot |
Select Week -ExpandProperty participants
# Results
<#
name age address week
---- --- ------- ----
user A 35 city A 2020-05
user B 16 city B 2020-05
user A 35 city A 2020-04
user B 16 city A 2020-04
user C 42 city B 2020-04
#>
Использование Select -Unique
ConvertTo-Json -Depth 3 |
ConvertFrom-Json |
Select -ExpandProperty SyncRoot |
Select Week -ExpandProperty participants |
Select -Unique Name, age, address
# Results
<#
name age address
---- --- -------
user A 35 city A
user B 16 city B
user B 16 city A
user C 42 city B
#>
Конечно, удаление города будет дайте вам три, за которыми вы после, ну, я просто показываю здесь имя и возраст. Если имя пользователя не может быть абсолютно уверенным в его уникальности, тогда, ну, вы знаете.
ConvertTo-Json -Depth 3 |
ConvertFrom-Json |
Select -ExpandProperty SyncRoot |
Select Week -ExpandProperty participants |
Select -Unique Name, age
# Results
<#
name age
---- ---
user A 35
user B 16
user C 42
#>
Теперь получение адреса и недели обратно в список перед преобразованием обратно в таблицу has - это еще одно важно, так как это не будет доступно в этом последнем утверждении Select.
И наконец, какова причина (ы), по которой вы не используете al oop, если это дает вам необходимые результаты? Что касается моих экспериментов до сих пор, это было бы гораздо проще, чем то, что я пробовал до сих пор и что я выложил здесь.
Обновление
Хорошо, я думаю, что у меня это для вас нет. На самом деле не уверен, почему это не дошло до меня в моем первом посте, особенно когда использование Group-Object дало мне мой первый ключ.
# Convert JSON and use Sort unique to work with data
Clear-Host
$HasheTableExport |
ConvertTo-Json -Depth 3 |
ConvertFrom-Json |
Select -ExpandProperty SyncRoot |
Select Week -ExpandProperty participants |
Sort-Object -Property name -Unique
<#
# Results
name age address week
---- --- ------- ----
user A 35 city A 2020-05
user B 16 city B 2020-05
user C 42 city B 2020-04
#>
# View as JSON
Clear-Host
$HasheTableExport |
ConvertTo-Json -Depth 3 |
ConvertFrom-Json |
Select -ExpandProperty SyncRoot |
Select Week -ExpandProperty participants |
Sort-Object -Property name -Unique |
ConvertTo-Json
# Results
<#
[
{
"name": "user A",
"age": 35,
"address": "city A",
"week": "2020-05"
},
{
"name": "user B",
"age": 16,
"address": "city B",
"week": "2020-05"
},
{
"name": "user C",
"age": 42,
"address": "city B",
"week": "2020-04"
}
]
#>
Затем используйте / конвертируйте по мере необходимости.