2012-07-24 58 views
0

我想知道兩個字符串之間的區別,我使用diff-lcs來執行此操作。但是,我在解析輸出時遇到了問題。解析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

字符(元素)是一個只讀屬性,您可以訪問。

生成的輸出是一個數組數組。每個第二個數組包含一個變化。第二個數組的大小爲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 
+0

非常感謝,diffs [0] [0] .element完美運作。 – bioinf80 2012-07-25 08:37:47

+0

如果它回答你的問題,你可以接受這個答案:http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work – 2012-07-25 14:08:36

+0

好的,謝謝 – bioinf80 2012-07-26 09:14:16