假设我有一个包含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"
答案 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"