0

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

谢谢

4

1 回答 1

0

character(element) 是您可以访问的只读属性。

生成的输出是一个数组数组。每个第二个数组都包含一个更改。第二个数组的大小为 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
于 2012-07-24T18:05:50.083 回答