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]]]]