解析diff-lcs的输出

时间:2012-07-24 15:36:48

标签: ruby

我想知道两个字符串之间的区别,我正在使用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?

由于

1 个答案:

答案 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