Hi,
I have an array a
=> [[“abc”, “def”, “ghi|ghi|kl”], [“jkl”, “mno”, “ghi|pqr”], [“stu”,
“vwx”, “yz|abc”]]
Some strings contain the pipe character.
I want to delete all the arrows that do NOT contain a certain string.
I tried this:
a.delete_if { |x| !x.include? “ghi|ghi” }
=> []
Of course, the array I need would be
=> [[“abc”, “def”, “ghi|ghi|kl”]]
I couldn’t figure out a work around. Any wildcards available for string
checking in Ruby? Any ideas?
Thanks.
Cheers,
Chris
Chris C. wrote:
I couldn’t figure out a work around. Any wildcards available for string
checking in Ruby? Any ideas?
Thanks.
Cheers,
Chris
Try
a[’|’]
That will return nil if the string does not contain the pipe.
Chris C. wrote:
I tried this:
a.delete_if { |x| !x.include? “ghi|ghi” }
=> []
Of course, the array I need would be
=> [[“abc”, “def”, “ghi|ghi|kl”]]
Enumerable#grep can be helpful here.
a = [[“abc”, “def”, “ghi|ghi|kl”], [“jkl”, “mno”, “ghi|pqr”], [“stu”,
“vwx”, “yz|abc”]]
a.delete_if { |x| x.grep(/ghi|ghi/).empty? }
p a # ==> [[“abc”, “def”, “ghi|ghi|kl”]]
Note that the ‘|’ char needs to be escaped in a regex.
Another option:
a.delete_if { |x| x.all? { |s| not s.include? “ghi|ghi” }}
Closer to the way you phrased the problem, but IMO a little less
rubyesque.
Hi –
On Mon, 7 Jul 2008, Chris C. wrote:
I couldn’t figure out a work around. Any wildcards available for string
checking in Ruby? Any ideas?
Maybe you want this:
a.delete_if {|ary| !ary.any? {|string| string.include?(‘ghi|ghi’) } }
or something like that.
David
Hi,
thank you for your suggestions… Problem solved. Cheers, CHris
Hi –
On Mon, 7 Jul 2008, Joel VanderWerf wrote:
I want to delete all the arrows that do NOT contain a certain string.
Enumerable#grep can be helpful here.
Another option:
a.delete_if { |x| x.all? { |s| not s.include? “ghi|ghi” }}
Closer to the way you phrased the problem, but IMO a little less rubyesque.
I kind of like this hybrid:
def a.delete_unless(&block); replace select(&block); end
=> nil
a.delete_unless {|ary| ary.include? {|string| string.include?(“ghi|ghi”) }}
=> [[“abc”, “def”, “ghi|ghi|kl”]]
David