Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby 将散列键的值相加,以输出单个整数_Ruby_Hash - Fatal编程技术网

Ruby 将散列键的值相加,以输出单个整数

Ruby 将散列键的值相加,以输出单个整数,ruby,hash,Ruby,Hash,我目前正在做exercism.io,我正在接受汉明挑战,我有点被困在这一点上,因为我需要做的是将散列中出现的数字相加 挑战如下: 编写一个程序,可以计算两条DNA链之间的汉明差 他们从这一点开始(不要担心说skip)的方法: 我现在需要做的是将键的值的数字相加,以创建一个整数,例如: 10) Failure: HammingTest#test_complete_distance_in_small_strands [hamming_test.rb:23]: Expected: 2 Actua

我目前正在做
exercism.io
,我正在接受汉明挑战,我有点被困在这一点上,因为我需要做的是将散列中出现的数字相加

挑战如下:

编写一个程序,可以计算两条DNA链之间的汉明差

他们从这一点开始(不要担心说
skip
)的方法:

我现在需要做的是将
键的
的数字相加,以创建一个整数,例如:

 10) Failure:
HammingTest#test_complete_distance_in_small_strands [hamming_test.rb:23]:
Expected: 2
  Actual: nil
  #<= {["A", [0]]=>["G", [1]], ["C", [0]]=>["T", [1]]}
10)故障:
哈明顿测试(HammingTest)#测试(test)(test)(test)(test)(test)(test)完成(
预期:2
实际:零
#[“G”、[1]]、[“C”、[0]=>[“T”、[1]]}
所以我需要做的是将
G
T
的值相加,然后输出一个整数
2


问题是,如何将两个值相加并输出一个整数,而不输出整个散列本身?

从散列开始

h = {["A", [0]]=>["G", [1]], ["C", [0]]=>["T", [1]]}
首先使用以获取值

> h.values
 => [["G", [1]], ["T", [1]]]
这些是数组,您需要每个数组的最后一个条目,它提供了

> h.values.map(&:last)
 => [[1], [1]]
您的数字被包装在另一个数组中,因此您可以再次使用
last
,但在语义上很好

> h.values.map(&:last).flatten
 => [1, 1]
然后一个简单的求和方法是使用

我不清楚您是否也希望从哈希键中提取数字,但如果需要,您可以使用,或者因为您需要所有内容


计算汉明距离比你想象的要容易得多。我在两行代码中完成了这项工作。每个测试用例的答案是提供的两个字符串之间的差异数。如果两个字符串的长度不匹配,则应为错误。每个字母的索引位置都很重要。当它就在你面前的时候,它总是那么简单。不过我有一个问题,
flatten
实际上做什么?只需将整数包装成一个数组?我链接到的
展平
文档将比我在这篇评论中做的更好地解释和演示:)
> h.values.map(&:last)
 => [[1], [1]]
> h.values.map(&:last).flatten
 => [1, 1]
> h.values.map(&:last).flatten.inject(:+)
 => 2
> h.keys + h.values
 => [["A", [0]], ["C", [0]], ["G", [1]], ["T", [1]]]
> h.to_a
 => [[["A", [0]], ["G", [1]]], [["C", [0]], ["T", [1]]]]