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

btw*_*btw 10 ruby string

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

所以说我有:

teamOne = "Billy, Frankie, Stevie, John"
teamTwo = "Billy, Frankie, Stevie"

$ teamOne.eql? teamTwo 
=> false
Run Code Online (Sandbox Code Playgroud)

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

Zac*_*ley 16

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

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"}>
Run Code Online (Sandbox Code Playgroud)

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

  • 当一个字符串中有重复项时,此解决方案失败,例如 .. teamOne = "Billy, Frankie, Stevie, John, Billy" 。不在集合中一个比利将被删除..因为你知道这是一个集合,现在两个集合的交集不会给你应该的结果 (2认同)

eri*_*rik 5

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

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


gab*_*iel 5

简单的解决方案:

 def compare(a, b)
   diff = a.split(', ') - b.split(', ')
   if diff === [] // a and b are the same
     true
   else
     diff
   end
 end
Run Code Online (Sandbox Code Playgroud)

当然,这只适用于您的字符串包含逗号分隔值的情况,但这可以根据您的情况进行调整。

  • 这表示如果 b 是 a 的超集,则 a 和 b 相同。它需要是 ((split_a - split_b) + (split_b - split_a)) 才能找到 a *或* b 中唯一的元素。 (2认同)