这是一个家庭作业问题,因此在来这里寻求帮助之前,我尽了最大的努力。我已经解决了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 ==)
答案 0 :(得分:1)
当数组中只有一个元素时,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
答案 1 :(得分:0)
编辑带有最多评论:
您可以这样做:
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
,然后用逗号将所有内容连接起来。
使用该数组的副本是非破坏性的。
答案 2 :(得分:0)
出于可读性考虑,我建议一个简单的解决方案。
oxford_comma ["blue", "green", "pink", "white"]
#=> "blue, green, pink and white"
oxford_comma ["blue", "green"]
#=> "blue and green"
oxford_comma ["blue"]
#=> "blue"
oxford_comma []
#=> ""
class CommentsController < GraphqlRails::Controller
action(:create).permit(:article_id, :body).returns(!Types::CommentType)
action(:update).permit(:id, :body).returns(!Types::CommentType)
def create
Comment.create!(params)
end
def update
Comment.find(params[:id]).update!(params)
end
end