问题描述
我一直在致力于创建一个函数,该函数返回笑脸的总数。有效的笑脸看起来像:“ :::D ;-D:〜)”,无效的笑脸看起来是:“;(:>:}:]”。
我下面的解决方案会引发以下错误消息“预期为0而不是1”。
def count_smileys(arr)
arr.count do |element|
[":)",":D",";-D",":~)",";~D","8~(",";(",":>",":}",":]","8~P","8-(","; )",";-P",":~P","~P","; (",":-)","8~D","~)","8D","8 )",":-D"," (",";D","8-D","8-P",": D"," ("].include?(element)
end
end
按目前的情况,我的解决方案通过了5个基本测试中的4个:
Basic tests
Test Passed: Value == 0
Test Passed: Value == 4
Test Passed: Value == 2
Test Passed: Value == 1
Expected: 0,instead got: 1
我尝试删除这些参数,但这仅适用于上一次测试,而其他测试则失败了。有什么建议?谢谢
以下示例测试:
Test.describe("Basic tests") do
Test.assert_equals(count_smileys([]),0)
Test.assert_equals(count_smileys([":D",":)"]),4)
Test.assert_equals(count_smileys([":)",":(",":O",":;"]),2)
Test.assert_equals(count_smileys([";]",":[",";*",":$",";-D"]),1)
Test.assert_equals(count_smileys([";",")","8-D"]),0)
end
解决方法
使用数组交集比较或检查
您没有显示实际的测试设置,所以我不会解决。但是,似乎您正在尝试使用Array#count的块形式对给定数组中的笑脸数进行计数。可以说,使用Array#&测量Array交集的大小或检查交集的内容可能更简单。例如:
SMILEYS = [
":)",":D",";-D",":~)",";~D","8~(",";(",":>",":}",":]","8~P","8-(","; )",";-P",":~P","~P","; (",":-)","8~D","~)","8D","8 )",":-D"," (",";D","8-D","8-P",": D"," ("
]
SMILEYS.&([":D",":)"]).size == 4
#=> true
SMILEYS.&([":)",":(",":O",":;"]).size == 2
#=> true
SMILEYS.&([";]",":[",";*",":$",";-D"]).size == 1
#=> true
SMILEYS.&([";",")","8-D"]).size == 0
#=> false
请注意,由于8-D
在您的 SMILEYS 列表中定义,因此最后一次比较是错误的。具体来说:
SMILEYS.&([";","8-D"])
#=> ["8-D"]
因此,除非1
确实不属于您的可接受值数组,否则期望值应为8-D
。如果是这样,请将其从包含允许值的变量或常量中删除。