这是一个家庭作业的问题,所以在我来这里寻求帮助之前,我尽可能地解决了它。我已经解决了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 ==)
发布于 2019-06-10 05:18:02
当数组中只有一个元素时,Array#join会返回元素本身:
['a'].join(' and ') #=> "a"
因此,当列表大小为3或更大时,可以简化代码,在最后一个元素前添加"and "
;如果元素少于3个,则返回.join(' and ')
:
def oxford_comma(list)
return list.join(' and ') if list.size < 3
list[-1] = "and " + list[-1]
list.join(', ')
end
发布于 2019-06-10 04:37:17
使用最多评论数编辑:
您可以这样做:
def oxford_comma(array)
array = [*array]
case array.size
when 0
''
when 1
array[0].to_s
when 2
array.join(' and ')
else
array_copy = array
array_copy[-1] = "and #{array_copy[-1]}"
array_copy.join(', ')
end
end
条件是处理空数组、单值数组和双值数组的边缘情况。否则,将最后一项更改为添加and
,然后使用逗号连接所有内容。使用阵列的副本是非破坏性的。
发布于 2019-06-10 13:17:00
对于可读性,我建议一个简单的解决方案。
def oxford_comma(arr)
case arr.size
when 0
""
when 1
arr.first
when 2
arr.join(' and ')
else
[arr[0..-2].join(', '), arr.last].join(', and ')
end
end
oxford_comma ["blue", "green", "pink", "white"]
#=> "blue, green, pink and white"
oxford_comma ["blue", "green"]
#=> "blue and green"
oxford_comma ["blue"]
#=> "blue"
oxford_comma []
#=> ""
https://stackoverflow.com/questions/56518068
复制相似问题