预期:0,取而代之的是:1 Ruby

问题描述

我一直在致力于创建一个函数,该函数返回笑脸的总数。有效的笑脸看起来像:“ :::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。如果是这样,请将其从包含允许值的变量或常量中删除。

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...