Size: a a a

Saint P Ruby Community

2020 April 08

PP

Pavel Peganov in Saint P Ruby Community
Видимо, кто-то из мира ФП меня всё-таки покусал
источник

f🤔

focusshifter 🤔 in Saint P Ruby Community
Pavel Peganov
Ну можно сделать гадко, императивно и бесхитростно, как удар бревном:
today.each_key.with_object({}) { |k, h| h[k] = [today[k], last_week[k]] }
эт если мы предполагаем что набор юзеров одинаковый и там, и там?
источник

PP

Pavel Peganov in Saint P Ruby Community
focusshifter 🤔
эт если мы предполагаем что набор юзеров одинаковый и там, и там?
Ну да. Если нет — синтезировать набор ключей объединением по всем и решить, как обрабатывать недостающих.
источник

AD

Anton Davydov in Saint P Ruby Community
Anton Davydov
я бы так и сделал на самом деле, а потом уже думал как красиво сделать. но наверно я бы через each делал и переменную
вот типо такого

today = {user1: 1, user2: 2}
last_week = {user1: 5, user2: 10}

all_keys = (today.keys + last_week.keys).uniq
result = {}

all_keys.each { |key| result[key] = { today: today[key], last_week: last_week[key] } }
result


выглядит так себе, но понятно и просто, если окажется слишком хреново - всегда можно код изолировать и переписать в будущем
источник

PP

Pavel Peganov in Saint P Ruby Community
Anton Davydov
вот типо такого

today = {user1: 1, user2: 2}
last_week = {user1: 5, user2: 10}

all_keys = (today.keys + last_week.keys).uniq
result = {}

all_keys.each { |key| result[key] = { today: today[key], last_week: last_week[key] } }
result


выглядит так себе, но понятно и просто, если окажется слишком хреново - всегда можно код изолировать и переписать в будущем
+/.uniq = & разве что, а так да, просто и понятно.
источник

AD

Anton Davydov in Saint P Ruby Community
Pavel Peganov
+/.uniq = & разве что, а так да, просто и понятно.
ну да, тоже вариант хороший
источник

AD

Anton Davydov in Saint P Ruby Community
Pavel Peganov
Ну можно сделать гадко, императивно и бесхитростно, как удар бревном:
today.each_key.with_object({}) { |k, h| h[k] = [today[k], last_week[k]] }
тут кстати не сработает, потому что не было сказано, что ключи одинаковые и там и там будут
источник

PP

Pavel Peganov in Saint P Ruby Community
Anton Davydov
тут кстати не сработает, потому что не было сказано, что ключи одинаковые и там и там будут
Ну, собственно, меня о том и спросили. Просто если это не так, то возникает вопрос, как обрабатывать пропуски.
источник

AD

Anton Davydov in Saint P Ruby Community
ну вот мой вариант +- это учитывает с ключам
источник

AD

Anton Davydov in Saint P Ruby Community
просто всегда можно в интеджер конвертировать, если надо
источник

AD

Anton Davydov in Saint P Ruby Community
я так понимаю, что это статистика по неделям или дням
источник

AD

Anton Davydov in Saint P Ruby Community
поэтому могу предположить, что 0 как результат будет ок
источник

PP

Pavel Peganov in Saint P Ruby Community
Я решил в духе однострочника дописать сбор ключей из всех хэшей, и конец результата меня пробил на ухмылку:
[today, last_week].map(&:keys).reduce(&:&)
&:&
источник

IK

Igor Khodyrev in Saint P Ruby Community
Лол
источник

PP

Pavel Peganov in Saint P Ruby Community
Я не всегда так пишу, если что, только для развлечения 😌
источник

AD

Anton Davydov in Saint P Ruby Community
Pavel Peganov
Я решил в духе однострочника дописать сбор ключей из всех хэшей, и конец результата меня пробил на ухмылку:
[today, last_week].map(&:keys).reduce(&:&)
&:&
кстати, вариант с reduce(&:&) имхо может вызвать вопросы у тех, кто не писал
источник

AD

Anton Davydov in Saint P Ruby Community
наверно flat_map + uniq был бы проще для команды в том плане, что он понятный без всякой магии
источник

r

rekero in Saint P Ruby Community
Pavel Peganov
Я решил в духе однострочника дописать сбор ключей из всех хэшей, и конец результата меня пробил на ухмылку:
[today, last_week].map(&:keys).reduce(&:&)
&:&
ловите его
источник

ME

Makar Ermokhin in Saint P Ruby Community
focusshifter 🤔
эт если мы предполагаем что набор юзеров одинаковый и там, и там?
Так если я правильно понимаю, то last_week должен включать ключи из today. Тогда «удар бревном» можно использовать, заменив today на last_week
источник

MS

Mikhail Sytchev in Saint P Ruby Community
Вакансия-тайм
источник