当前位置:  开发笔记 > 编程语言 > 正文

diff一个ruby字符串或数组

如何解决《diff一个ruby字符串或数组》经验,为你挑选了6个好方法。

如何在Ruby中进行两个字符串或数组的差异?



1> Chris Bunch..:

对于数组,请使用减号运算符.例如:

>> foo = [1, 2, 3]
=> [1, 2, 3]
>> goo = [2, 3, 4]
=> [2, 3, 4]
>> foo - goo
=> [1]

这里最后一行删除foo中的所有东西,也就是goo,只剩下元素1.我不知道如何为两个字符串执行此操作,但是直到有人知道有关它的帖子,你可以将每个字符串转换为数组,使用减号运算符,然后将结果转换回来.


为了解决克里斯的观点,你可以做(​​foo - bar)+(bar - foo).获取数组之间的所有差异(如果使用.to_a,则为字符串)
这是不正确的.foo = [1,2,3] bar = [4,5,6] foo - bar#=> [1,2,3] Ruby的实现是正确的,但我不认为这是问题所要求的.

2> samg..:

我对红宝石中缺少一个好的库感到沮丧,所以我写了http://github.com/samg/diffy.它使用diff在幕后,专注于方便,并提供漂亮的输出选项.


我正在为我的一个项目使用diffy.简单的工作.谢谢.

3> Brian Mitche..:

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


注意:diff.rb是GPL
对于那些没有理解GPL含义的人来说:它包含一个'copyleft'概念,要求你将它包含在内的任何专有代码强迫你开源和GPL - 赠送你以前专有的代码.

4> da01..:

对于字符串,我会首先尝试@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



5> Grant Hutchi..:

还有diff-lcs作为宝石可用的.它自2004年以来一直没有更新,但我们一直在使用它没有任何问题.

编辑: 2011年发布了新版本.看起来它正在积极开发中.

http://rubygems.org/gems/diff-lcs



6> Brian Armstr..:

@ 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

Revisions for <%= @page.name %>

    <% @page.revisions.each do |revision| %>
  • Revised <%= distance_of_time_in_words_to_now revision.created_at %> ago
    <%= Page.diff( revision.changes['description'][0], revision.changes['description'][1] ) %>

  • <% end %> # in style.css ins.diffmod, ins.diffins { background: #d4fdd5; text-decoration: none; } del.diffmod, del.diffdel { color: #ff9999; }

看起来很不错.顺便说一句,我在acts_as_audited插件中使用了它.

推荐阅读
夏晶阳--艺术
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有