在Ruby中查找字符串之间的区别

我需要取两个字符串,比较它们,并打印它们之间的差异。

所以说我有:

teamOne = "Billy, Frankie, Stevie, John" teamTwo = "Billy, Frankie, Stevie" $ teamOne.eql? teamTwo => false 

我想说“如果这两个字符串不相等,请打印它们之间的不同之处。在这种情况下,我只是想打印”John“。

到目前为止,所有解决方案都忽略了第二个arrays也可能具有第一个arrays不具备的元素的事实。 Chuck指出了一个修复(参见其他post的评论),但是如果你使用集合,有一个更优雅的解决方案:

 require 'set' teamOne = "Billy, Frankie, Stevie, John" teamTwo = "Billy, Frankie, Stevie, Zach" teamOneSet = teamOne.split(', ').to_set teamTwoSet = teamTwo.split(', ').to_set teamOneSet ^ teamTwoSet # => # 

如果需要,可以将该集转换回数组。

如果您要比较的真实字符串与您提供的字符串类似,那么这应该有效:

 teamOneArr = teamOne.split(“,”)
 => [“比利”,“弗兰基”,史蒂维“,”约翰“]
 teamTwoArr = teamTwo.split(“,”)
 => [“比利”,“弗兰基”,史蒂维“]
 teamOneArr  -  teamTwoArr
 => [“约翰”]

简单方案:

  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)