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

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (9)

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

我可以返回没有格式化的字符串,如果它只有一个元素,当有两个元素时只有单词'和',并且当有三个以上元素时我可以添加逗号和单词'和'。但是,当数组有三个以上的元素时,我似乎无法跳过添加最后一个逗号。

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 ==)
提问于
用户回答回答于

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

['a'].join(' and ') #=> "a"

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

def oxford_comma(list)
  return list.join(' and ') if list.size < 3
  list[-1] = "and " + list[-1]
  list.join(', ')
end
用户回答回答于

编辑最大评论:

你可以这样做:

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然后使用逗号加入所有内容。使用数组的副本是非破坏性的。

扫码关注云+社区

领取腾讯云代金券