如何计算具有条件的数组迭代返回的真值?

时间:2013-12-12 11:26:17

标签: ruby arrays boolean iteration

我有:

def distance(str1, str2)
  str1.chars.each_index do |index| 
    difference?(str1, str2, index)
  end
end

def difference?(str1, str2, index)
  if !str1.chars[index].nil? && !str2.chars[index].nil?
    str1.chars[index] != str2.chars[index]
  end
end

对于str1.chars中的每个元素,与str2.chars中具有相同index的元素不同,difference?会返回true

如何计算true中返回distance的次数?

我使用过这样的东西:

def distance(str1, str2)
  distance = 0
  str1.chars.each_index do |index| 
    if  difference?(str1, str2, index)
      distance += 1
    end
  end
  distance
end

有更好的方法吗?也许count有一个区块就是答案,但我无法弄明白。

2 个答案:

答案 0 :(得分:1)

def distance(str1, str2)
  str1.each_char.with_index.count do |_, index| 
    difference?(str1, str2, index)
  end
end

distance("foo", "bar") # => 3
distance("foo", "foobar") # => 0
distance("foobar", "foo") # => 0

答案 1 :(得分:0)

这被称为Levenshtein Distance。有一个宝石:

require 'levenshtein'
Levenshtein.distance("abc","abd") #=> 1

gem可能比其他解决方案更快,因为它使用原生扩展。