我想知道两个字符串之间的区别,我正在使用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'。有没有办法从该输出中提取@element?
由于
答案 0 :(得分:0)
字符(元素)是您可以访问的只读属性。
生成的输出是一个数组数组。每个第二个数组包含一个更改。第二个数组的大小为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
end