我有几个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
。
我该如何做到这一点?
答案 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