这是一个家庭作业的问题,所以我试图通过它尽可能多的工作之前,我可以来这里寻求帮助。我已经解决了95%,我只是不知道最后一位的语法,或者如果它与我现在正在做的不同,我应该使用什么方法。我在网上找不到任何不是我同学的答案的答案,我也避免点击那些答案,看看他们是如何完成这个问题的。
如果字符串只有一个元素,我可以不带格式地返回它,当有两个元素时,我可以只带'and',当有三个以上的元素时,我可以添加逗号和'and'。然而,当数组中有三个以上的元素时,我似乎不能跳过添加最后一个逗号。
def oxford_comma(array)
if array.length == 2
array.join(" and ")
elsif array.length > 2
array.insert(-2, "and")
array[0..-1].join(", ")
else
array.join
end
end
下面是我得到的错误消息:
Failure/Error: expect(oxford_comma(["kiwi", "durian", "starfruit", "mangos", "dragon fruits"])).to eq("kiwi, durian, starfruit, mangos, and dragon fruits")
expected: "kiwi, durian, starfruit, mangos, and dragon fruits"
got: "kiwi, durian, starfruit, mangos, and, dragon fruits"
(compared using ==)
4条答案
按热度按时间bksxznpy1#
当数组中只有一个元素时,Array#join返回元素本身:
因此,当列表大小为3或更大时,您可以简化代码,将
"and "
前置到最后一个元素,或者如果小于3个元素,则返回.join(' and ')
:m528fe3b2#
最大评论:
你可以这样做:
情况是处理空数组、单值数组和双值数组的边缘情况。否则,您更改最后一项以添加
and
,然后用逗号连接所有内容。使用阵列的副本是非破坏性的。2w2cym1i3#
为了可读性,我建议一个简单的解决方案。
lo8azlld4#
如果你使用的Ruby版本支持Pattern Matching(我相信2.7是实验版本,3.0是官方版本),你可以这样做:
如果需要处理一个空数组,也可以添加一个
in []
case。您可能还希望在末尾添加一个else
case,以防传入一些意外的内容。