我想知道两个字符串之间的区别,所以我使用diff-lcs来实现。但是,我在解析输出时遇到了问题。
require 'diff-lcs'
a = 'abcdef'
b = 'abcsef'
diffs = Diff::LCS.diff(a,b)
puts diffs.inspect
==> [[#<Diff::LCS::Change:0x0000010106dcc0 @action="-", @position=3, @element="d">, #<Diff::LCS::Change:0x0000010106db30 @action="+", @position=3, @element="s">], [#<Diff::LCS::Change:0x0000010106d360 @action="-", @position=6, @element="">]]我只想输出字符差异,所以'd‘和's’。有没有办法从输出中提取@元素?
谢谢
发布于 2012-07-25 02:05:50
字符(元素)是您可以访问的只读属性。
生成的输出是一个arrays.Each数组,第二个数组包含一个更改。第二个数组的大小为2,包括每个字符串中的变化。
我不知道您希望它有多通用,但对于这种情况,以下方法将起作用:
a = 'abcdef'
b = 'abcsef'
diffs = Diff::LCS.diff(a,b)
p diffs[0][0].element #=> d
p diffs[0][1].element #=> s如果你有很多匹配,可能是某种循环:
diffs.each do |a|
a.each do |b|
puts b.to_s + ' ' + b.element
end
endhttps://stackoverflow.com/questions/11634381
复制相似问题