У меня есть следующие два хэшей:рубин рода хэш на основе другого хэш
db = {"1" => "first_name", "2" => "last_name", "5" => "status", "10" => "city" }
csv = {"1" => "first_name", "2" => "last_name", "5" => "status", "7" => "address", "10" => "city" }
Я хочу заказать CSV на основе БД, и если есть какие-либо ключи в формате CSV не в БД, то я хочу, чтобы переместить они до конца CSV-файл, так что в приведенном выше примере результат будет выглядеть следующим образом:
{"1" => "first_name", "2" => "last_name", "5" => "status", "10" => "city", "7" => "address" }
Поскольку ключ «7» был не в дб хэш, мы просто переместил его к концу Csv хэш ,
Это то, что я пробовал:
db = {"1" => "first_name", "2" => "last_name", "5" => "status", "10" => "city" }
csv = {"1" => "first_name", "2" => "last_name", "5" => "status", "7" => "address", "10" => "city" }
rejects = csv.reject {|k| db.include? k }
result = csv.keep_if {|k,_| db.include? k }
result.merge!(rejects)
result
=> {"1"=>"first_name", "2"=>"last_name", "5"=>"status", "10"=>"city", "7"=>"address"}
Это похоже на работу. Но гарантировано ли это работать? Будет ли слияние всегда ставить второй хеш в конце или есть вероятность, что слияние может смешивать хэши вместе без рассмотрения заказа?
Вам не нужно, чтобы изменить порядок ключей в 'csv', которые присутствуют в' db'? – sawa
@sawa ключи, которые находятся в db, которые не находятся в csv, должны быть добавлены в конец csv. Порядок ключей в db не имеет значения, но все они должны быть в конце хэш-памяти csv. – Donato
Я не спрашиваю о «ключах, которые находятся в db, которые не находятся в csv», я спрашиваю о «ключах, которые находятся в db, которые находятся в csv». – sawa