h = {a: 1, b: 2} key_order = %i[b a] h.slice(*key_order) # => {:b=>2, :a=>1} require 'benchmark/ips' class Hash # active_support/core_ext/hash/slice # https://github.com/rails/rails/blob/v5.2.0.beta2/activesupport/lib/active_support/core_ext/hash/slice.rb#L23-L25 def slice_as(*keys) keys.each_with_object(Hash.new) { |k, hash| hash[k] = self[k] if has_key?(k) } end # based on active_support/core_ex
![Hashの順番を並び替えるときHash#sliceがべんり - Qiita](https://cdn-ak-scissors.b.st-hatena.com/image/square/48427df6581ca8364891f7c9c846ff8f1d4047b8/height=288;version=1;width=512/https%3A%2F%2Fqiita-user-contents.imgix.net%2Fhttps%253A%252F%252Fcdn.qiita.com%252Fassets%252Fpublic%252Farticle-ogp-background-412672c5f0600ab9a64263b751f1bc81.png%3Fixlib%3Drb-4.0.0%26w%3D1200%26mark64%3DaHR0cHM6Ly9xaWl0YS11c2VyLWNvbnRlbnRzLmltZ2l4Lm5ldC9-dGV4dD9peGxpYj1yYi00LjAuMCZ3PTk3MiZoPTM3OCZ0eHQ9SGFzaCVFMyU4MSVBRSVFOSVBMCU4NiVFNyU5NSVBQSVFMyU4MiU5MiVFNCVCOCVBNiVFMyU4MSVCMyVFNiU5QiVCRiVFMyU4MSU4OCVFMyU4MiU4QiVFMyU4MSVBOCVFMyU4MSU4REhhc2glMjNzbGljZSVFMyU4MSU4QyVFMyU4MSVCOSVFMyU4MiU5MyVFMyU4MiU4QSZ0eHQtYWxpZ249bGVmdCUyQ3RvcCZ0eHQtY29sb3I9JTIzMjEyMTIxJnR4dC1mb250PUhpcmFnaW5vJTIwU2FucyUyMFc2JnR4dC1zaXplPTU2JnM9ZGMwMGNkZDMxOWJlMWJjNTA1MDA2NzUyMmE3ZTI2YzQ%26mark-x%3D142%26mark-y%3D57%26blend64%3DaHR0cHM6Ly9xaWl0YS11c2VyLWNvbnRlbnRzLmltZ2l4Lm5ldC9-dGV4dD9peGxpYj1yYi00LjAuMCZoPTc2Jnc9NzcwJnR4dD0lNDBoYW5hY2hpbl8mdHh0LWNvbG9yPSUyMzIxMjEyMSZ0eHQtZm9udD1IaXJhZ2lubyUyMFNhbnMlMjBXNiZ0eHQtc2l6ZT0zNiZ0eHQtYWxpZ249bGVmdCUyQ3RvcCZzPTEzODBiODQ0YzEwZDEyZjI3NmUwOGU5NGM2MjE5YTM0%26blend-x%3D142%26blend-y%3D436%26blend-mode%3Dnormal%26txt64%3DaW4g5qCq5byP5Lya56S-44Kz44O844OJ44K_44Kv44OI%26txt-width%3D770%26txt-clip%3Dend%252Cellipsis%26txt-color%3D%2523212121%26txt-font%3DHiragino%2520Sans%2520W6%26txt-size%3D36%26txt-x%3D156%26txt-y%3D536%26s%3De2763d21ccdb57d193846c1c59439e92)