ruby-core@ruby-lang.org archive (unofficial mirror)
 help / color / mirror / Atom feed
From: "Dan0042 (Daniel DeLorme)" <noreply@ruby-lang.org>
To: ruby-core@ruby-lang.org
Subject: [ruby-core:105828] [Ruby master Feature#16252] Hash#partition should return hashes
Date: Wed, 27 Oct 2021 14:31:45 +0000 (UTC)	[thread overview]
Message-ID: <redmine.journal-94351.20211027143144.11019@ruby-lang.org> (raw)
In-Reply-To: redmine.issue-16252.20191015151246.11019@ruby-lang.org

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/

  parent reply	other threads:[~2021-10-27 14:31 UTC|newest]

Thread overview: 7+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <redmine.issue-16252.20191015151246.11019@ruby-lang.org>
2021-10-26 14:42 ` [ruby-core:105808] [Ruby master Feature#16252] Hash#partition should return hashes Dan0042 (Daniel DeLorme)
2021-10-27  7:03 ` [ruby-core:105818] " zverok (Victor Shepelev)
2021-10-27 14:07 ` [ruby-core:105827] " Dan0042 (Daniel DeLorme)
2021-10-27 14:31 ` Dan0042 (Daniel DeLorme) [this message]
2021-11-18  5:13 ` [ruby-core:106113] " matz (Yukihiro Matsumoto)
2021-11-18  5:24 ` [ruby-core:106114] " knu (Akinori MUSHA)
2021-11-18 15:54 ` [ruby-core:106149] " Dan0042 (Daniel DeLorme)

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-list from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

  List information: https://www.ruby-lang.org/en/community/mailing-lists/

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=redmine.journal-94351.20211027143144.11019@ruby-lang.org \
    --to=ruby-core@ruby-lang.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).