I have an array like this:
array = [ "manyThings.mp3", "myLike.gif", "moreCoco.bmp",
"theFormat.bmp"]
and I want to make some comparison to eliminate all the words in the
array that are NOT of the bmp format. So at the end the array will look
like this:
I have an array like this:
array = [ "manyThings.mp3", "myLike.gif", "moreCoco.bmp",
"theFormat.bmp"]
and I want to make some comparison to eliminate all the words in the
array that are NOT of the bmp format. So at the end the array will look
like this:
array.delete_if { |elem| not elem =~ /.bmp/i }
It worked for the following test:
array = [ "manyThings.mp3", "myLike.gif", "moreCoco.BmP", "theFormat.bmp"]
array.delete_if { |elem| not elem =~ /.bmp/i }
array.each do |elem|
puts elem
end
···
On Wed, Dec 17, 2008 at 8:22 PM, John Zoldiark <tavarezjonathan@gmail.com>wrote:
I have an array like this:
array = [ "manyThings.mp3", "myLike.gif", "moreCoco.bmp",
"theFormat.bmp"]
and I want to make some comparison to eliminate all the words in the
array that are NOT of the bmp format. So at the end the array will look
like this:
See Array#select
irb(main):007:0> array.select{|x| x.match(/.*\.bmp/)}
=> ["moreCoco.bmp", "theFormat.bmp"]
···
On Wed, Dec 17, 2008 at 9:22 PM, John Zoldiark <tavarezjonathan@gmail.com>wrote:
I have an array like this:
array = [ "manyThings.mp3", "myLike.gif", "moreCoco.bmp",
"theFormat.bmp"]
and I want to make some comparison to eliminate all the words in the
array that are NOT of the bmp format. So at the end the array will look
like this:
I have an array like this:
array = [ "manyThings.mp3", "myLike.gif", "moreCoco.bmp",
"theFormat.bmp"]
and I want to make some comparison to eliminate all the words in the
array that are NOT of the bmp format. So at the end the array will look
like this:
array = ["moreCoco.bmp", "theFormat.bmp"]
Instead of a reject/select you can also use grep when working with regexen:
array.grep(/\.bmp$/)
Instead of using a regex you could also use File.extname here:
array.select {|x| File.extname(x)==".bmp"}
Of course all these only tell you that the filenames end with .bmp, not in
which format the files actually are.
And just another note: generally, for transforming and/or iterating over
arrays, finding/removing elements, extracting values, and so on, you'll
want to take a look at Ruby's "Enumerable" module. It's available on all
the main collections in Ruby and is extremely handy.
Particularly, the "each", "select", "map", "partition" and "reject"
methods are very handy. I use "map" and "select" all the time.
Actually, the regex should have the end of string anchor:
array.delete_if { |elem| not elem =~ /.bmp$/i }
···
On Wed, Dec 17, 2008 at 8:40 PM, Joshua Ball <chezball@gmail.com> wrote:
I think this should do it:
array.delete_if { |elem| not elem =~ /.bmp/i }
It worked for the following test:
array = [ "manyThings.mp3", "myLike.gif", "moreCoco.BmP", "theFormat.bmp"]
array.delete_if { |elem| not elem =~ /.bmp/i }
array.each do |elem|
puts elem
end
On Wed, Dec 17, 2008 at 8:22 PM, John Zoldiark <tavarezjonathan@gmail.com > >wrote:
> I have an array like this:
> array = [ "manyThings.mp3", "myLike.gif", "moreCoco.bmp",
> "theFormat.bmp"]
>
> and I want to make some comparison to eliminate all the words in the
> array that are NOT of the bmp format. So at the end the array will look
> like this:
>
> array = ["moreCoco.bmp", "theFormat.bmp"]
>
> is there a way to do this???
>
> Many thanks for the help
> --
> Posted via http://www.ruby-forum.com/\.
>
>
you might also want to anchor your regex
(the $ at the end) so that it won't work on
file names like 'foo.bmp.gz'. and be sure
to escape your . in front of bmp with \.
Actually, the regex should have the end of string anchor:
array.delete_if { |elem| not elem =~ /.bmp$/i }
Also, remember that . is any character, whereas \. is just . for the
sake of getting exactly what you want. !~ looks cleaner to me, but
that's just personal preference in most cases.
···
--
Tim Greer, CEO/Founder/CTO, BurlyHost.com, Inc.
Shared Hosting, Reseller Hosting, Dedicated & Semi-Dedicated servers
and Custom Hosting. 24/7 support, 30 day guarantee, secure servers.
Industry's most experienced staff! -- Web Hosting With Muscle!
Arg... regex...I am new to them. You are right, of course.
Thanks (for the correction and the !~)
···
On Wed, Dec 17, 2008 at 8:57 PM, Tim Greer <tim@burlyhost.com> wrote:
Joshua Ball wrote:
>
> Actually, the regex should have the end of string anchor:
> array.delete_if { |elem| not elem =~ /.bmp$/i }
>
Also, remember that . is any character, whereas \. is just . for the
sake of getting exactly what you want. !~ looks cleaner to me, but
that's just personal preference in most cases.
--
Tim Greer, CEO/Founder/CTO, BurlyHost.com, Inc.
Shared Hosting, Reseller Hosting, Dedicated & Semi-Dedicated servers
and Custom Hosting. 24/7 support, 30 day guarantee, secure servers.
Industry's most experienced staff! -- Web Hosting With Muscle!