LoginSignup
1

More than 5 years have passed since last update.

Ruby の Array#uniq で重複したアイテムは、先に出てきたものが残る

Last updated at Posted at 2018-08-27
items = [
  {name: 'john', attr: 'foo'},
  {name: 'john', attr: 'bar'},
  {name: 'john', attr: 'baz'},
  {name: 'paul', attr: 'foo'},
 ].uniq { |item| item[:name] }
puts items.first[:attr] #=> ??

Array#uniq した時に残されるアイテムが保証されてるのか気になったので調べた

公式ドキュメントより

uniq は配列から重複した要素を取り除いた新しい配列を返します。 uniq! は削除を破壊的に行い、削除が行われた場合は self を、 そうでなければnil を返します。
取り除かれた要素の部分は前に詰められます。 要素の重複判定は、Object#eql? により行われます。

instance method Array#uniq - Ruby 2.5.0 リファレンスマニュアル

日本語版だとどっちが残されるのか曖昧

self is traversed in order, and the first occurrence is kept.

instance method Array#uniq

英語ドキュメントにはちゃんと書いてあった。最初に見つけたのを保持する。

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1