我需要取两个字符串,比较它们,并打印它们之间的差异。
假设我有:
teamOne = "Billy, Frankie, Stevie, John"
teamTwo = "Billy, Frankie, Stevie"
$ teamOne.eql? teamTwo
=> false
我想说:“如果这两个字符串不相等,那么打印出它们之间不同的部分。在这个例子中,我只想打印出“John”。”
我需要取两个字符串,比较它们,并打印它们之间的差异。
假设我有:
teamOne = "Billy, Frankie, Stevie, John"
teamTwo = "Billy, Frankie, Stevie"
$ teamOne.eql? teamTwo
=> false
我想说:“如果这两个字符串不相等,那么打印出它们之间不同的部分。在这个例子中,我只想打印出“John”。”
require 'set'
teamOne = "Billy, Frankie, Stevie, John"
teamTwo = "Billy, Frankie, Stevie, Zach"
teamOneSet = teamOne.split(', ').to_set
teamTwoSet = teamTwo.split(', ').to_set
teamOneSet ^ teamTwoSet # => #<Set: {"John", "Zach"}>
如果需要的话,这个集合可以转换回数组。
teamOneArr = teamOne.split(", ") => ["Billy", "Frankie", Stevie", "John"] teamTwoArr = teamTwo.split(", ") => ["Billy", "Frankie", Stevie"] teamOneArr - teamTwoArr => ["John"]其中,teamOne和teamTwo是需要进行比较的字符串。将它们分别通过split方法转换为数组,并使用减号运算符得到不同之处。
def compare(a, b)
diff = a.split(', ') - b.split(', ')
if diff === [] // a and b are the same
true
else
diff
end
end
当然,这只适用于您的字符串包含逗号分隔值的情况,但可以根据您的情况进行调整。
您需要先排序,以确保您不会从较小的字符串中减去较大的字符串:
def compare(*params)
params.sort! {|x,y| y <=> x}
diff = params[0].split(', ') - params[1].split(', ')
if diff === []
true
else
diff
end
end
puts compare(a, b)
teamOne = "Billy, Frankie, Tom, Stevie, John"
teamTwo = "Billy, Frankie, Stevie, Tom, Zach"
s1 = teamOne.split(' ')
s2 = teamTwo.split(' ')
diff = []
s1.zip(s2).each do |s1, s2|
if s1 != s2
diff << s1
end
end
puts diff.join(' ')
结果是:
Tom, Stevie, John
被接受的答案给出:
#<Set: {"Zach", "John"}>