.include? for string

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