获取没有方括号和双引号的数组元素值

时间:2015-11-20 00:41:56

标签: arrays ruby sorting indexing

我有几个Ruby数组:

array1 = ["a", "b"]
array2 = ["a", "b", "c"]
array3 = ["a", "b", "c", "d"]
array4 = ["a", "b", "c", "d", "e"]

我需要返回以下字符串:

#array1
"a"

#array2
"a and b"

#array3
"a, b and c"

#array4
"a, b, c and d"

不应该显示数组的最后一个元素。

我事先并不知道数组包含多少元素或这些元素的值。

为了实现我的需要,我提出了以下方法:

def format_array(array)
  if array.length - 1 == 1
    array[0].to_s
  elsif array.length - 1 == 2
    array[0].to_s + " and " + array[1].to_s
  elsif array.length - 1 > 2
    array.sort.each_with_index do |key, index|
      unless key == "e"
        if index == array.length - 2
          " and " + array[index].to_s
        else
          array[index].to_s + ", "
        end
      end
    end
  end
end

此方法返回带有方括号和双引号而不是精简字符串的值数组。例如,我为["a", "b", "c", "d", "e"]获得了"a, b, c and d"而不是array4

我该如何做到这一点?

2 个答案:

答案 0 :(得分:5)

def join_with_commas_and_and(array)
  if array.length <= 2
    array.join(' and ')
  else
    [array[0..-2].join(', '), array[-1]].join(' and ')
  end
end

编辑:要忽略最后一个元素,请将此行添加为函数中的第一行:

array = array[0..-2]

答案 1 :(得分:2)

我认为在插入逗号之前忽略'and'最简单,然后将最后一个逗号替换为'and'

def fmt(arr)
  return arr.first if arr.size == 2
  str = arr[0..-2].join(', ')
  str[str.rindex(',')] = ' and'
  str
end
  # ["a", "b"]: a
  # ["a", "b", "c"]: a and b
  # ["a", "b", "c", "d"]: a, b and c
  # ["a", "b", "c", "d", "e"]: a, b, c and d