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?
On 6/3/07, Josselin [email protected] wrote:
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 B.” [email protected] said:
=> [1, 2, 3, 5, 6, 7, 8, 9]
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 H. [email protected] 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 exact§ly 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 [email protected] wrote:
=> 9
checking for equality)
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