Привет всем,
Я смотрю, есть ли возможность реализовать функцию задержки - без необходимости перебирать весь список, например, посмотрите на следующий пример:
$input = '[
{ "user_id":"1", "earned":"100", "valid_at": "20200101"},
{ "user_id":"1", "earned":"200", "valid_at": "20200102"},
{ "user_id":"1", "earned":"10", "valid_at": "20200103"},
{ "user_id":"2", "earned":"10", "valid_at": "20200101"},
{ "user_id":"2", "earned":"40", "valid_at": "20200103"},
{ "user_id":"3", "earned":"400", "valid_at": "20200101"},
{ "user_id":"3", "earned": null, "valid_at": "20200102"},
{ "user_id":"3", "earned": "20", "valid_at": "20200103"}
]'
$expected_output = '[
{ "user_id":"1", "earned":"100", "valid_at": "20200101", "last_earned":null},
{ "user_id":"1", "earned":"200", "valid_at": "20200102", "last_earned":"100"},
{ "user_id":"1", "earned":"10", "valid_at": "20200103", "last_earned":"200"},
{ "user_id":"2", "earned":"10", "valid_at": "20200101", "last_earned":null},
{ "user_id":"2", "earned":"40", "valid_at": "20200103", "last_earned":"10"},
{ "user_id":"3", "earned":"400", "valid_at": "20200101", "last_earned":null},
{ "user_id":"3", "earned": null, "valid_at": "20200102", "last_earned":"400"},
{ "user_id":"3", "earned": "20", "valid_at": "20200103", "last_earned":null}
]'
$json_input = ConvertFrom-Json –InputObject $input
$expected_json_output = ConvertFrom-Json –InputObject $expected_output
Это создает следующий ввод:
Вместе со следующим ожидаемым выводом:
Теперь мои вопросы таковы:
- Есть ли способ программно построить столбец last_earned без необходимости перебирать весь список (т. Е. как-то с Group-Object или Where-Object?
- В настоящее время я перебираю весь список - но мне пришлось быстро осознать, что, хотя он и работает, как ожидалось, он очень неэффективен, если у вас много записей для вычисления этого по
- В настоящее время я вычисляю это отдельно для каждого отдельного user_id (т. е.
- выбирая его,
- упорядочивая результат, а затем
- проверка последних заработанных