From: "Dan0042 (Daniel DeLorme)" Date: 2021-10-27T14:31:45+00:00 Subject: [ruby-core:105828] [Ruby master Feature#16252] Hash#partition should return hashes Issue #16252 has been updated by Dan0042 (Daniel DeLorme). FWIW, current usage in gems is consistent with Hash, but I did find one incompatibility. actionpack-6.0.0/lib/action_dispatch/routing/mapper.rb 267: constraints.partition do |key, requirement| subarrays then converted with `Hash[subarray]` capybara-3.29.0/lib/capybara/selector/definition/element.rb 21: booleans, values = options.partition { |_k, v| [true, false].include? v }.map(&:to_h) subarrays converted with `.map(&:to_h)` fog-openstack-1.0.9/lib/fog/openstack/image/v1/models/images.rb 32: custom_properties, params = headers.partition do |k, _| subarrays converted with `.map { |p| Hash[p] }` fugit-1.3.3/lib/fugit/duration.rb 71: INFLA_KEYS, NON_INFLA_KEYS = 72: KEYS.partition { |k, v| v[:I] } subarrays iterated with `.each do |k, a|` **However** there is incompatibility with `keys = INFLA_KEYS.dup; keys.unshift([ :mon, { s: Fugit::Duration.parse(mon).to_sec } ])` sequel-5.24.0/lib/sequel/plugins/auto_validations.rb 167: not_null_cols, explicit_not_null_cols = db_schema.select{|col, sch| sch[:allow_null] == false}.partition{|col, sch| sch[:default].nil?}.map{|cs| cs.map{|col, sch| col}} subarrays converted to keys with `.map{|cs| cs.map{|col, sch| col}}` would have same result with hash but could be written `.map(:keys)` instead sprockets-3.7.2/lib/sprockets/cache/file_store.rb 167: delete_caches, keep_caches = caches.partition { |filename, stat| subarrays compatible with hash: `.map(&:first)` and `.inject(0) { |sum, (_, stat)|` ---------------------------------------- Feature #16252: Hash#partition should return hashes https://bugs.ruby-lang.org/issues/16252#change-94351 * Author: Dan0042 (Daniel DeLorme) * Status: Open * Priority: Normal ---------------------------------------- Hash#partition is implemented by Enumerable so it just returns two arrays of arrays ```ruby {1=>2,3=>4}.partition{|k,|k==1} #=> [[[1, 2]], [[3, 4]]] ``` But I think it would make more sense to behave similarly to Hash#select and Hash#reject ```ruby {1=>2,3=>4}.partition{|k,|k==1} #=> [{1=>2}, {3=>4}] ``` -- https://bugs.ruby-lang.org/ Unsubscribe: