比较字符串和打印匹配(Ruby)

时间:2013-03-30 18:59:17

标签: ruby arrays string

假设我有一个包含3个字符串的数组:

strings = ["/I/love/bananas", "/I/love/blueberries", "/I/love/oranges"]

我想比较我的3个字符串并打印出这个新字符串:

new_string = "/I/love"

我不希望通过char匹配char,只是逐字逐句。有人有聪明的方法吗?

作为一个善意的象征,我已经制作了这个丑陋的代码来展示我正在寻找的功能:

strings = ["/I/love/bananas", "/I/love/blueberries", "/I/love/oranges"]
benchmark = strings.first.split("/")
new_string = []

strings.each_with_index do |string, i|
  unless i == 0
    split_string = string.split("/")
    split_string.each_with_index do |elm, i|
      final_string.push(elm) if elm == benchmark[i] && elm != final_string[i]
    end
  end
end

final_string = final_string.join("/")

puts final_string # => "/I/love"

3 个答案:

答案 0 :(得分:3)

您可以尝试以下方法:

p RUBY_VERSION
strings = ["/I/love/bananas", "/I/love/blueberries", "/I/love/oranges"]
a = strings.each_with_object([]) { |i,a| a << i.split('/') }
p (a[0] & a[1] & a[2]).join('/')

strings = ["/I/love/bananas", "/I/love/blueberries", "/I/love/oranges"]
a = strings.each_with_object([]) { |i,a| a << i.split('/') }.reduce(:&).join('/')
p a

输出:

"2.0.0"
"/I/love"

答案 1 :(得分:3)

这与@iAmRubuuu的基本方法相同,但在输入中处理三个以上的字符串,更简洁,更实用。

strings.map{ |s| s.split('/') }.reduce(:&).join('/')

答案 2 :(得分:1)

str = ["/I/love/bananas", "/I/love/blueberries", "/I/love/oranges"]

tempArr = []

str.each do |x|
    tempArr << x.split("/")
end
(tempArr[0] & tempArr[1] & tempArr[2]).join('/') #=> "/I/love"