From: Alex Young Date: 2012-06-18T19:09:56+09:00 Subject: [ruby-core:45696] Re: [ruby-trunk - Bug #6596] New method for Arrays : Array#index On 18/06/12 04:25, knu (Akinori MUSHA) wrote: > > Issue #6596 has been updated by knu (Akinori MUSHA). > > > =begin > You are changing the subject. This issue is about Array#indexes, and if you talk about generalization, you should work out a concrete proposal with convincing examples to open another issue. > > For that matter, I don't think "indexes" could or should be generalized to Enumerable because Enumerable currently does not have the sense of index. > > Lastly, even if you sometimes need to collect indices you can simply use #select with ease: > > indexes = (0...a.size).select { |i| a[i] % 2 == 1 } > > #enumurator = (0...a.size).lazy.select { |i| a[i] % 2 == 1 } > > Considering that indices are only useful when you access the originating array with them, the array should have a name and there should be no problem if you can't do this in a method chain. > =end Index lists *can* be useful without the original array. A couple of years ago I had the job of turning a big CSV into a database schema. The first step in this was to work out which columns in the CSV are correlated. Here's a simplified example: $ cat example.csv NAME,TYPE,LABEL aleph,a,foo aleph,b,foo beth,a,bar See how NAME and LABEL vary together? I want them to end up in the same table, with two rows in it. You can group columns into tables by generating an Array#indexes list for each unique entry in each column in order, then seeing if the columns match by checking *just the index lists* for for equality, ignoring the original column data. -- Alex > > ---------------------------------------- > Bug #6596: New method for Arrays : Array#index > https://bugs.ruby-lang.org/issues/6596#change-27286 > > Author: robin850 (Robin Dupret) > Status: Feedback > Priority: Normal > Assignee: > Category: core > Target version: 2.0.0 > ruby -v: 2.0.0 > > > Hello > > 5 days ago, I submitted a pull request on Github which provides a new method for the array objects which is Array#indexes. I have fist edit the Array#index method in order it to return an array of indexes and not a single index (which is the first occurrence it finds). I found it more logical but a user (trans) tells us that it could break the contract of Array#index so I decided to move it into Array#indexes. Eric (drbrain) tells me I should reasonning why I want to add this method ; it's just a point of view : I don't really understand why Array#index return a single index if the parameter is in the array several times. > > Examples > > a = [1, 2, 3, 1] > a.indexes(1) > Return : [0, 3] > a.index(1) > Return : 0 > In my opinion, it's not really logical, 1 is in the array twice > > Moreover, this pull request doesn't beak anything because we don't edit the Array#index method so programms which were created with previous version of Ruby will work. > > I hope my post is complete. Have a nice day. > > > >