Chr*_*nch 33
对于数组,请使用减号运算符.例如:
>> foo = [1, 2, 3]
=> [1, 2, 3]
>> goo = [2, 3, 4]
=> [2, 3, 4]
>> foo - goo
=> [1]
Run Code Online (Sandbox Code Playgroud)
这里最后一行删除foo中的所有东西,也就是goo,只剩下元素1.我不知道如何为两个字符串执行此操作,但是直到有人知道有关它的帖子,你可以将每个字符串转换为数组,使用减号运算符,然后将结果转换回来.
sam*_*amg 24
我对红宝石中缺少一个好的库感到沮丧,所以我写了http://github.com/samg/diffy.它使用diff在幕后,专注于方便,并提供漂亮的输出选项.
Bri*_*ell 20
diff.rb就是你想要的,可以在 http://users.cybercity.dk/~dsl8950/ruby/diff.html 通过互联网档案:
http://web.archive.org/web/20140421214841/http://users.cybercity.dk:80/~dsl8950/ruby/diff.html
da0*_*a01 19
对于字符串,我会首先尝试@sam-saffron在下面提到的Ruby Gem.它更容易安装:http: //github.com/pvande/differ/tree/master
gem install differ
irb
require 'differ'
one = "one two three"
two = "one two 3"
Differ.format = :color
puts Differ.diff_by_word(one, two).to_s
Differ.format = :html
puts Differ.diff_by_word(one, two).to_s
Run Code Online (Sandbox Code Playgroud)
还有diff-lcs作为宝石可用的.它自2004年以来一直没有更新,但我们一直在使用它没有任何问题.
编辑: 2011年发布了新版本.看起来它正在积极开发中.
http://rubygems.org/gems/diff-lcs
@ da01上面提到的HTMLDiff为我工作.
script/plugin install git://github.com/myobie/htmldiff.git
# bottom of environment.rb
require 'htmldiff'
# in model
class Page < ActiveRecord::Base
extend HTMLDiff
end
# in view
<h1>Revisions for <%= @page.name %></h1>
<ul>
<% @page.revisions.each do |revision| %>
<li>
<b>Revised <%= distance_of_time_in_words_to_now revision.created_at %> ago</b><BR>
<%= Page.diff(
revision.changes['description'][0],
revision.changes['description'][1]
) %>
<BR><BR>
</li>
<% end %>
# in style.css
ins.diffmod, ins.diffins { background: #d4fdd5; text-decoration: none; }
del.diffmod, del.diffdel { color: #ff9999; }
Run Code Online (Sandbox Code Playgroud)
看起来很不错.顺便说一句,我在acts_as_audited插件中使用了它.
小智 5
t=s2.chars; s1.chars.map{|c| c == t.shift ? c : '^'}.join
Run Code Online (Sandbox Code Playgroud)
这条简单的线^在不匹配的位置给出了一个。这通常就足够了,并且可以复制/粘贴。
| 归档时间: |
|
| 查看次数: |
41864 次 |
| 最近记录: |