我需要两个字符串,比较它们,并打印它们之间的差异。查找Ruby中字符串的区别
所以说我有:
teamOne = "Billy, Frankie, Stevie, John"
teamTwo = "Billy, Frankie, Stevie"
$ teamOne.eql? teamTwo
=> false
我想说“如果两个字符串不相等,打印什么,那就是它们之间的不同。在这种情况下,我只是希望打印。 “约翰”
我需要两个字符串,比较它们,并打印它们之间的差异。查找Ruby中字符串的区别
所以说我有:
teamOne = "Billy, Frankie, Stevie, John"
teamTwo = "Billy, Frankie, Stevie"
$ teamOne.eql? teamTwo
=> false
我想说“如果两个字符串不相等,打印什么,那就是它们之间的不同。在这种情况下,我只是希望打印。 “约翰”
所有的解决方案迄今忽视的事实是第二阵列也可以有元素第一数组没有。查克指出修复(见其他帖子评论),但如果你带套的工作更优雅的解决方案:
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是相同的,如果teamTwoArr是teamOneArr的超集。它需要((teamOneArr - teamTwoArr)+(teamTwoArr - teamOneArr))查找在teamOne *或* teamTwo中唯一的元素。 – Chuck 2009-01-09 00:18:31
简单的解决方案:
def compare(a, b)
diff = a.split(', ') - b.split(', ')
if diff === [] // a and b are the same
true
else
diff
end
end
当然这只适用于如果你的字符串包含逗号分隔值,但这可以根据你的情况进行调整。
这说a和b是一样的,如果b是a的超集。它需要是((split_a - split_b)+(split_b - split_a))来查找在*或* b中唯一的元素。 – Chuck 2009-01-09 00:17:18
你需要排序首先要保证你是不是减去一个较小的一个更大的字符串:
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)
似乎是一个重复的http://stackoverflow.com/questions/80091/diff-a-ruby-string-or-array – Samuel 2009-01-08 22:17:14
看到这个http://stackoverflow.com/questions/13824444/comparing-two-字符串在红宝石/ 13824648#13824648 – tokhi 2016-01-06 14:52:30