首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在Ruby中使用数组方法将字符串数组转换为带有牛津逗号的列表

如何在Ruby中使用数组方法将字符串数组转换为带有牛津逗号的列表
EN

Stack Overflow用户
提问于 2019-06-10 04:15:33
回答 3查看 846关注 0票数 0

这是一个家庭作业的问题,所以在我来这里寻求帮助之前,我尽可能地解决了它。我已经解决了95%的问题,我只是不知道最后一位的语法,或者如果它与我现在所做的不同,我应该使用什么方法。我在网上找不到任何不是我同学的答案的解决方案,我避免点击这些答案来查看他们是如何完成这道题的。

如果字符串只有一个元素,那么我可以返回没有格式的字符串,当有两个元素时,我可以只返回单词' and‘,当有超过三个元素时,我可以添加逗号和单词' and’。但是,当数组包含三个以上的元素时,我似乎不能跳过添加最后一个逗号。

代码语言:javascript
复制
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

下面是我得到的错误消息:

代码语言:javascript
复制
         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 ==)
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2019-06-10 05:18:02

当数组中只有一个元素时,Array#join会返回元素本身:

代码语言:javascript
复制
['a'].join(' and ') #=> "a"

因此,当列表大小为3或更大时,可以简化代码,在最后一个元素前添加"and ";如果元素少于3个,则返回.join(' and ')

代码语言:javascript
复制
def oxford_comma(list)
  return list.join(' and ') if list.size < 3
  list[-1] = "and " + list[-1]
  list.join(', ')
end
票数 2
EN

Stack Overflow用户

发布于 2019-06-10 04:37:17

使用最多评论数编辑:

您可以这样做:

代码语言:javascript
复制
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,然后使用逗号连接所有内容。使用阵列的副本是非破坏性的。

票数 0
EN

Stack Overflow用户

发布于 2019-06-10 13:17:00

对于可读性,我建议一个简单的解决方案。

代码语言:javascript
复制
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

代码语言:javascript
复制
oxford_comma ["blue", "green", "pink", "white"]
  #=> "blue, green, pink and white" 
oxford_comma ["blue", "green"]
  #=> "blue and green" 
oxford_comma ["blue"]
  #=> "blue" 
oxford_comma []
  #=> "" 
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56518068

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档