How to remove empty element in an array

Hi all,

I have an array of [1,2,’’] I want change it to [1,2]. I check the
document about Array but I can’t find a way to remove the empty element.
Any comments?

Thanks,

Li

On 23/10/06, Li Chen [email protected] wrote:


Posted via http://www.ruby-forum.com/.

If you only want to get rid of empty strings
array.reject{|element| element.empty?}

If you want to get rid of nils
array.compact

Farrel

On Monday 23 October 2006 14:27, Li Chen wrote:

Hi all,

I have an array of [1,2,’’] I want change it to [1,2]. I check the
document about Array but I can’t find a way to remove the empty element.
Any comments?

Thanks,

Li

You can Array#reject! if you want to do it in-place or Array#delete_if
if you
want to capture the non-empty elements on a new Array instance.

Cheers
Ulisses Montenegro

Farrel L. wrote:

On 23/10/06, Li Chen [email protected] wrote:

Hi all,

I have an array of [1,2,‘’] I want change it to [1,2]. I check the

If you only want to get rid of empty strings
array.reject{|element| element.empty?}

array.reject{|element| element.empty? rescue false}

Joel VanderWerf wrote:

Farrel L. wrote:

On 23/10/06, Li Chen [email protected] wrote:

Hi all,

I have an array of [1,2,‘’] I want change it to [1,2]. I check the

If you only want to get rid of empty strings
array.reject{|element| element.empty?}

array.reject{|element| element.empty? rescue false}

Hi Joel,

I come out with my own solution by using a regxp:

a=[1,2,‘’,‘’]
a.delete_if {|x| x=~/$/}
p a

##output
C:\Ruby\self>array3.rb
[1, 2]

Pete Y. wrote:

Your solution is broken. It’ll delete any string from the array:

irb(main):001:0> a = [1, 2, ‘a’, ‘b’]
=> [1, 2, “a”, “b”]
irb(main):002:0> a.delete_if {|x| x =~ /$/}
=> [1, 2]

Hi,

I think this time it should work: regxp for the empty sapce is ^\d*$.

irb(main):003:0> a=[1,2,’’,’’, ‘a’,‘b’]
=> [1, 2, “”, “”, “a”, “b”]
irb(main):004:0> a.delete_if {|x| x=~/^\d*$/}
=> [1, 2, “a”, “b”]

Li

On 24/10/2006, at 4:02 AM, Li Chen wrote:

I come out with my own solution by using a regxp:

a=[1,2,‘’,‘’]
a.delete_if {|x| x=~/$/}
p a

Your solution is broken. It’ll delete any string from the array:

irb(main):001:0> a = [1, 2, ‘a’, ‘b’]
=> [1, 2, “a”, “b”]
irb(main):002:0> a.delete_if {|x| x =~ /$/}
=> [1, 2]

Pete Y.

On 10/23/06, Li Chen [email protected] wrote:

Hi,

I think this time it should work: regxp for the empty sapce is ^\d*$.

irb(main):003:0> a=[1,2,‘’,‘’, ‘a’,‘b’]
=> [1, 2, “”, “”, “a”, “b”]
irb(main):004:0> a.delete_if {|x| x=~/^\d*$/}
=> [1, 2, “a”, “b”]

I’m sorry, isn’t \d used for a digit?

irb(main):006:0> a = [1, ‘’, ‘a’, ‘2’, ‘3456’]
=> [1, “”, “a”, “2”, “3456”]
irb(main):007:0> a.delete_if{|x| x =~ /^\d*$/}
=> [1, “a”]

This one will delete any string that is made of numbers only.

Cheers,
Alvim.

Li Chen wrote:

I have an array of [1,2,’’] I want change it to [1,2]. I check the
document about Array but I can’t find a way to remove the empty element.
Any comments?

How about this?

irb(main):201:0> arr = [1,2,’’]
=> [1, 2, “”]
irb(main):202:0> arr -= [’’]
=> [1, 2]

Pete Y. wrote:

Your solution is broken. It’ll delete any string from the array:

irb(main):001:0> a = [1, 2, ‘a’, ‘b’]
=> [1, 2, “a”, “b”]
irb(main):002:0> a.delete_if {|x| x =~ /$/}
=> [1, 2]
Pete Y.
http://notahat.com/
Thanks! I was beginning to think I was the only one seeing that
behaviour. I feel much better now.

On Tuesday 24 October 2006 00:02, Seth E. wrote:

=> [1, 2]

I am new to the list, and have so far tried to keep myself as a silent
lurker
hidden on the corner, but coming from a Perl background (5+ years) and
seeing
this beautiful piece of code really makes me feel confident about
leaving old
habits and joining the Ruby club.

On 24/10/2006, at 1:02 PM, Seth E. wrote:

=> [1, 2, “”]
irb(main):202:0> arr -= [‘’]
=> [1, 2]

If you just want to delete empty strings (as opposed to strings
containing only whitespace), this would seem the obvious way:

irb(main):003:0> a = [1, 2, ‘’, 3, ‘’]
=> [1, 2, “”, 3, “”]
irb(main):004:0> a.delete ‘’
=> “”
irb(main):005:0> a
=> [1, 2, 3]

If you want to delete any whitespace-only strings as well:

irb(main):002:0> a = [1, 2, ‘’, 3, ’ ']
=> [1, 2, “”, 3, " "]
irb(main):007:0> a.delete_if {|s| s =~ /^\s*$/ }
=> [1, 2, 3]

Pete Y.