|
|
 |
 |
 |
 |
Ruby Programming Language
|
 |
 |
 |
 |
 |
 |
 |
 |
delete in Array (if exist) and count
I am trying to delete an element from an array if it exists and count the number of item afterwards I wrote anArray = [1,2,3,4,5,6,7,8,9] anArray.size => 9 anArray.map {|e| e if e != 4}.compact => [1, 2, 3, 5, 6, 7, 8, 9] anArray.map {|e| e if e != 4}.compact.size => 8 is ther a better way to do it... it it's enough ? (learning always how to write better code..) thanks joss
Josselin wrote: > I am trying to delete an element from an array if it exists and count > the number of item afterwards
How about using Array#delete_if? -- RMagick OS X Installer [http://rubyforge.org/projects/rmagick/] RMagick Hints & Tips [http://rubyforge.org/forum/forum.php?forum_id=1618] RMagick Installation FAQ [http://rmagick.rubyforge.org/install-faq.html]
On 6/3/07, Josselin <josse@wanadoo.fr> wrote:
> I am trying to delete an element from an array if it exists and count > the number of item afterwards > I wrote > anArray = [1,2,3,4,5,6,7,8,9] > anArray.size > => 9 > anArray.map {|e| e if e != 4}.compact > => [1, 2, 3, 5, 6, 7, 8, 9] > anArray.map {|e| e if e != 4}.compact.size > => 8 > is ther a better way to do it... it it's enough ? (learning always how > to write better code..)
Array#delete works also with no need for a block (i.e. you're only checking for equality) anArray = [1,2,3,4,5,6] p anArray.delete(4) p anArray.size
On 2007-06-03 16:57:43 +0200, "Todd Benson" <caduce@gmail.com> said:
> On 6/3/07, Josselin <josse @wanadoo.fr> wrote: >> I am trying to delete an element from an array if it exists and count >> the number of item afterwards >> I wrote >> anArray = [1,2,3,4,5,6,7,8,9] >> anArray.size >> => 9 >> anArray.map {|e| e if e != 4}.compact >> => [1, 2, 3, 5, 6, 7, 8, 9] >> anArray.map {|e| e if e != 4}.compact.size >> => 8 >> is ther a better way to do it... it it's enough ? (learning always how >> to write better code..) > Array#delete works also with no need for a block (i.e. you're only > checking for equality) > anArray = [1,2,3,4,5,6] > p anArray.delete(4) > p anArray.size
I checked anArray.delete(0) => nil then anArray.delete(0).size NoMethodError: undefined method `size' for nil:NilClass as I tried to write it in one line.... thanks joss
On 2007-06-03 16:35:16 +0200, Tim Hunter <TimHun@nc.rr.com> said: > Josselin wrote: >> I am trying to delete an element from an array if it exists and count >> the number of item afterwards > How about using Array#delete_if?
that's exactly what I want... I read the API doc, I look into the delete.. but why I stop before the delete_if ????? thanks a lot .. Joss
On 6/3/07, Josselin <josse@wanadoo.fr> wrote:
> On 2007-06-03 16:57:43 +0200, "Todd Benson" <caduce @gmail.com> said: > > On 6/3/07, Josselin <josse@wanadoo.fr> wrote: > >> I am trying to delete an element from an array if it exists and count > >> the number of item afterwards > >> I wrote > >> anArray = [1,2,3,4,5,6,7,8,9] > >> anArray.size > >> => 9 > >> anArray.map {|e| e if e != 4}.compact > >> => [1, 2, 3, 5, 6, 7, 8, 9] > >> anArray.map {|e| e if e != 4}.compact.size > >> => 8 > >> is ther a better way to do it... it it's enough ? (learning always how > >> to write better code..) > > Array#delete works also with no need for a block (i.e. you're only > > checking for equality) > > anArray = [1,2,3,4,5,6] > > p anArray.delete(4) > > p anArray.size > I checked > anArray.delete(0) > => nil > then > anArray.delete(0).size > NoMethodError: undefined method `size' for nil:NilClass > as I tried to write it in one line.... > thanks > joss
That's because Array#delete returns the deletion, not the Array itself, so, if it has to be on one line, then: (anArray.delete(4); a).size or anArray.delete_if {|i| i == 4}.size or I prefer anArray.reject! {|i| i == 4}.size #delete, #delete_if, and #reject! all change the array while #reject does not
|
 |
 |
 |
 |
|