0

2 つの文字列の違いを知りたいのですが、これを行うために 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(要素) は、アクセスできる読み取り専用の属性です。

生成された出力は配列の配列です。各 2 番目の配列には 1 つの変更が含まれます。2 番目の配列のサイズは 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 に答える