假设:
fruits = %w[Banana Apple Orange Grape]
chars = 'ep'
如何打印fruits
所有chars
字符的所有元素?我尝试了以下方法:
fruits.each{|fruit| puts fruit if !(fruit=~/["#{chars}"]/i).nil?)}
但我在结果中看到'Orange'
,其中没有'p'
字符。
答案 0 :(得分:6)
p fruits.select { |fruit| chars.delete(fruit.downcase).empty? }
["Apple", "Grape"]
String#delete会返回chars
的副本,并删除delete
个参数中的所有字符。
答案 1 :(得分:4)
只是为了好玩,这里有你如何用正则表达式做到这一点,这要归功于积极前瞻的魔力:
fruits = %w[Banana Apple Orange Grape]
p fruits.grep(/(?=.*e)(?=.*p)/i)
# => ["Apple", "Grape"]
这很简洁,但正则表达式有点神秘,如果你想要概括它会变得更糟:
def match_chars(arr, chars)
expr_parts = chars.chars.map {|c| "(?=.*#{Regexp.escape(c)})" }
arr.grep(Regexp.new(expr_parts.join, true))
end
p match_chars(fruits, "ar")
# => ["Orange", "Grape"]
另外,我很确定这会大多数或所有其他答案都会超越。
答案 2 :(得分:3)
fruits = ["Banana", "Apple", "Orange", "Grape"]
chars = 'ep'.chars
fruits.select { |fruit| (fruit.split('') & chars).length == chars.length }
#=> ["Apple", "Grape"]
答案 3 :(得分:2)
if not exists (select 1 from ydata.dbo.entity
where NameID = @CurrentName)
要打印:
chars.each_char.with_object(fruits.dup){|e, a| a.select!{|s| s.include?(e)}}
# => ["Apple", "Grape"]
答案 4 :(得分:2)
我是一个绝对的初学者,但这里有什么对我有用
fruits = %w[Banana Apple Orange Grape]
chars = 'ep'
fruits.each {|fruit| puts fruit if fruit.include?('e') && fruit.include?('p')}
答案 5 :(得分:2)
以下是另一种方法:
fruits.select {|f| chars.downcase.chars.all? {|c| f.downcase.include?(c)} }
答案 6 :(得分:1)
试试这个,首先将所有字符拆分成一个数组(chars.split("")
),然后检查所有字符是否都存在于单词中。
fruits.select{|fruit| chars.split("").all? {|char| fruit.include?(char)}}
#=> ["Apple", "Grape"]