Учитывая этот массив (сгенерированный из файла)Как я могу реорганизовывать преобразование этого массива в Hash
["Yonkers", "DM1210", "70.00 USD"], ["Yonkers", "DM1182", "19.68 AUD"],
["Nashua", "DM1182", "58.58 AUD"], ["Scranton", "DM1210", "68.76 USD"],
["Camden", "DM1182", "54.64 USD"]]
преобразовать его в хэш индексируется второй элемент (ы) с помощью следующей формы:
result = Hash.new([])
trans_data.each do |arr|
result[arr[1]].empty? ? result[arr[1]] = [[arr[0], arr[2]]] : result[arr[1]] << [arr[0], arr[2]]
end
result
Это выводит хэш в формате я хочу это:
{"DM1210"=>[["Yonkers", "70.00 USD"], ["Scranton", "68.76 USD"]], "DM1182"=>[["Yonkers", "19.68 AUD"], ["Nashua", "58.58 AUD"], ["Camden", "54.64 USD"]]}
Я не чувствую, что мой код ... чистый. Есть ли лучший способ сделать это?
EDIT: До сих пор я был в состоянии заменить его: (result[arr[1]] ||= []) << [arr[0], arr[2]]
С без значения по умолчанию для хэш
Является ли это офис ссылка? DM = Dunder Mifflin? :) – squiguy
Идеальный вопрос, дающий ввод и ожидаемый результат и то, что вы пробовали до сих пор. Отлично сработано! –
@ThomasKlemm На самом деле выражение в начале не является допустимым выражением Ruby. И не объясняется, что такое 'trans_data'. И я не знаю, что означает ску. – sawa