У меня есть массив, содержащий хеши. Я бы хотел сортировать его по значению created_at
. Вот пример структуры массива:Сортировка массива хэшей по значению
Примечание. Я написал человекочитаемые даты, значения будут отметкой времени.
[
{"group1"=>[
{:item1=>[{"name" => "Tim", "created_at"=>"4 weeks ago"}]},
{:item2=>[{"name" => "Jim", "created_at"=>"3 weeks ago"}]},
{:item3=>[{"name" => "Ted", "created_at"=>"2 weeks ago"}]},
]
},
{"group2"=>[
{:item1=>[{"name" => "Sally", "created_at"=>"1 month ago"}]},
{:item2=>[{"name" => "Willa", "created_at"=>"2 months ago"}]},
{:item3=>[{"name" => "Sammi", "created_at"=>"4 months ago"}]},
]
},
{"group3"=>[
{:item1=>[{"name" => "Jeff", "created_at"=>"1 month ago"}]},
{:item2=>[{"name" => "Lois", "created_at"=>"1 day ago"}]},
{:item3=>[{"name" => "Lisa", "created_at"=>"1 week ago"}]},
]
}
]
Я хотел бы организовать вышеуказанные данные таким образом, выходной сигнал будет group3
первым, так как она содержит item
с created_at
значением 1 день назад. Следующий будет group1
, так как он содержит элемент со значением 2 недели назад, group2 будет последним, так как это самая последняя дата месяц назад.
Как я могу переупорядочить эти данные?
Я думал, я мог бы сделать что-то вроде
array_of_nested_hashes.each do |a|
a.sort_by { |k, v| v[:created_at] }
end
для сортировки данных в каждой группе по дате, а затем отсортировать каждую группу по дате его первый хэш - как это было бы самым последним хэш в каждой группе, давая мне полностью отсортированный хеш, который будет выглядеть так:
[
{"group3"=>[
{:item2=>[{"name" => "Lois", "created_at"=>"1 day ago"}]},
{:item3=>[{"name" => "Lisa", "created_at"=>"1 week ago"}]},
{:item1=>[{"name" => "Jeff", "created_at"=>"1 month ago"}]},
]
},
{"group1"=>[
{:item3=>[{"name" => "Ted", "created_at"=>"2 weeks ago"}]},
{:item2=>[{"name" => "Jim", "created_at"=>"3 weeks ago"}]},
{:item1=>[{"name" => "Tim", "created_at"=>"4 weeks ago"}]},
]
},
{"group2"=>[
{:item1=>[{"name" => "Sally", "created_at"=>"1 month ago"}]},
{:item2=>[{"name" => "Willa", "created_at"=>"2 months ago"}]},
{:item3=>[{"name" => "Sammi", "created_at"=>"4 months ago"}]},
]
},
]
Можете ли вы показать нам, что желаемый результат выглядит как? Также отметки времени являются точными, иначе сортировка будет выглядеть как целое, а затем следующая буква. т.е. 1 час назад> 1 день назад, хотя ваш пример выглядит нормально. – Anthony
В этом случае желаемый вывод является хешем, переупорядоченным. Как бы то ни было, вы ответили на мой вопрос раньше - это тот же хэш, с которым я работаю, как и раньше, - кстати. – LpLrich
Спасибо, в выводе для group_3 почему 1 месяц выше 1 дня? – Anthony