2016-09-26 65 views
0

我试图找到两个字符串之间的字母差异。 例如,如果我把单词ATTGCC和GTTGAC,差异将是2,因为A和G以及C和G不是相同的字符。如何计算Ruby中字符串之间不同字母的数量?

class DNA 
    def initialize (nucleotide) 
    @nucleotide = nucleotide 
    end 
    def length 
    @nucleotide.length 
    end 
    def hamming_distance(other) 
    self.nucleotide.chars.zip(other.nucleotide) { |a,b| a == b }.count 
    end 

    protected 

    attr_reader :nucleotide 
end 

dna1 = DNA.new("ATTGCC") 
dna2 = DNA.new("GTTGAC") 


puts dna1.hamming_distance(dna2) 

方法hamming_distance并未真正发挥作用,因为它给出了一个错误的参数类型为String(必须回应:每个)(类型错误)

+0

查找https://en.wikipedia.org/wiki/Levenshtein_distance – Mircea

+0

鉴于你[前雇主发现不匹配的对数问题](https://stackoverflow.com/questions/39711526/how-to-compare-two-instance-variables-from-the-same-class-in-ruby)我假设输入字符串是(for例如)'“ATTGCC”'和'“GTTGAC”'并且长度将是相等的。值得在这个问题中明确这些条件。 – meagar

+0

是的,我继续并更新了问题。谢谢。 – Codes316

回答

0

假设字符串的长度是相同的,你可以将它们分割进行压缩,并找到多少对匹配:

string1 = "RATTY" 
string2 = "CATTI" 

string1.chars.zip(string2.chars).select { |a,b| a == b }.count 
  • .chars产生字符数组的字符串("RATTY" =>在0)
  • .zip呼叫两个阵列合并在一起成为一个对的阵列,["R", "A", "T"].zip(["C", "A", "T"]) =>[ ["R", "C"], ["A", "A"], ["T", "T"]]
  • select滤除其中的值是不相等的
  • 计数返回对数的对通过匹配选择

您可以通过否定选择

+0

对不起,我想我没有解释程序的条件,因为该方法给了我一个错误的参数类型字符串(必须响应:每个)(TypeError) – Codes316

相关问题