Кукольный в цикле добавил пустые элементы в массив - PullRequest
0 голосов
$hash_arr_1 = { b => 2, c => 3, f => 1 }
$arr = ['a', 'c', 'd', 'f', 'e']
$hash_arr_2 = $arr.map |$param| {
   if has_key($hash_arr_1, $param) {
      {$param => $hash_arr_1[$param]}
    }
}
notice($hash_arr_2)

Result: [{   , c => 3,    , f => 1,   ,}]

Как сделать, чтобы в массиве не было пустых элементов?

1 Ответ

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

Проблема здесь в том, что вы используете функцию map лямбда, когда вы действительно хотите использовать filter. Резюме из связанной документации выглядит следующим образом:

Применяет лямбду к каждому значению в структуре данных и возвращает массив или хеш, содержащий любые элементы, для которых лямбда оценивается как true.

Итак, решение для вас:

$hash_arr_2 = $hash_arr_1.filter |$key, $value| { $key in $arr }

Это будет выполнять итерацию по ключам хеша $hash_arr_1, проверять, существует ли ключ как член массива $arr с предоставленным условным условием, а затем возвращать хеш только с теми парами значений ключа, которые имеют значение true .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...