如何在RubyonRails中更新数组的第一个元素



我不是RubyonRails开发人员,几乎没有任何经验。

在一个非常复杂的上下文中,我有这样一个过程,用分号替换逗号,并为数组的每个元素添加一个包装器(双引号(:

@wrap_char = '"'
def escape(text)
if text.present?
@wrap_char + text.to_s.tr(',', ';') + @wrap_char
else
@wrap_char + @wrap_char
end
end
['2','SE','STKT','','','',''].map(&method(:escape)).join(',') << "n"

返回此:"2","SE","STKT","","","",""

我的问题是,我需要从包装中排除第一个元素,以便获得:2,"SE","STKT","","","",""

我们将高度赞赏您的想法!

首先,nil.to_s'',因此可以将escape方法简化为:

def escape(text)
@wrap_char + text.to_s.tr(',', ';') + @wrap_char
end

一种直接的方法是这样的:

a = ['2', 'SE', 'STKT', '', '', '', '']
(a[0, 1] + a[1..].map(&method(:escape))).join(',')

只要a不为空,它就会起作用。如果你想让a为空,那么你可以利用[][1..]nilnil.to_a为空数组的优势:

(a[0, 1] + a[1..].to_a.map(&method(:escape))).join(',')

你也可以说:

(a[0..0] + a[1..].to_a.map(&method(:escape))).join(',')

但是CCD_ 11范围一直看着我很有趣,所以我更喜欢CCD_。如果你不喜欢括号,你也可以使用#slice

(a.slice(0, 1) + a.slice(1..).to_a.map(&method(:escape))).join(',')

你也可以把";留下第一个元素";迭代中的逻辑,比如:

a.map.with_index { |e, i| i > 0 ? escape(e) : e }.join(',')
wrap_char = """
converts = ['2','SE','STKT','','','',''].map { |x| 
x =~ /[+-]?[0-9]+/ ? x : "#{wrap_char}#{x.to_s.tr(',', ';')}#{wrap_char}" 
}
puts converts.join(",")
# 2,"SE","STKT","","","",""

相关内容

最新更新