#ruby #ruby-on-rails-3
Вопрос:
Я ищу, чтобы извлечь ключи и значения из хэша. Мне удается получить данные, но в неправильном формате. Я делаю следующее:
@message_count_series = @messages.collect { |p| "[#{p["created_at"]}, #{p["total_cnt"]}]" } =gt; ["[2021-12-02 13:21:19.837233, 3]", "[2021-11-20 13:54:54.846048, 3]"]
То, что я хотел бы получить, это:
=gt; [[2021-12-02 13:21:19.837233, 3], [2021-11-20 13:54:54.846048, 3]]
Только без кавычек (не строка).
Я попробовал следующее :
@message_opened_series = @messages.collect { |p| ["#{p["created_at"]}, #{p["opened_cnt"]}"] } =gt; [["2021-12-02 13:21:19.837233, 1"], ["2021-11-20 13:54:54.846048, 0"]]
Что подводит меня ближе, но теперь мои данные считаются строкой внутри массива.
Следующее, по-видимому, работает, но может быть не очень надежным
@message_opened_series = @messages.collect { |p| [DateTime.parse("#{p["created_at"]}"), ("#{p["opened_cnt"]}").to_i] } =gt; [[Thu, 02 Dec 2021 13:21:19 0000, 1], [Sat, 20 Nov 2021 13:54:54 0000, 0]]
Пожалуйста, есть ли лучший способ сделать это ?
Комментарии:
1. Как выглядит ваш оригинальный хэш? Каков тип данных значений в исходном хэше? Почему вы думаете, что ваша последняя версия, которая работает, может быть ненадежной? Возможно ли, что хэш содержит неверные данные?
2. Ваш желаемый результат не является законным объектом Ruby, поэтому вы не можете получить этот результат.
Ответ №1:
@message_opened_series = @messages.collect { |p| [p["created_at"].to_s, p["opened_cnt"]] } =gt; [["2021-12-02 13:21:19.837233", 3], ["2021-11-20 13:54:54.846048", 3]]