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/
next prev 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).