How to remove empty element in an array

L

Li Chen

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
 
F

Farrel Lifson

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
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
 
U

Ulisses Reina Montenegro de Albuquerque

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
 
J

Joel VanderWerf

Farrel said:
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}
 
L

Li Chen

Joel said:
Farrel said:
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]
 
P

Pete Yandell

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 Yandell
http://notahat.com/
 
L

Li Chen

Pete said:
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
 
M

Marcelo Alvim

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.
 
S

Seth E.

Li said:
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]
 
P

Pete Yandell

Li said:
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]

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 Yandell
http://notahat.com/
 
P

Patrick Spence

Pete said:
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 Yandell
http://notahat.com/
Thanks! I was beginning to think I was the only one seeing that
behaviour. I feel much better now.
 
U

Ulisses Reina Montenegro de Albuquerque

Li said:
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]

<off-topic>
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.
</off-topic>
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,769
Messages
2,569,579
Members
45,053
Latest member
BrodieSola

Latest Threads

Top