如果存在类似的值,如何删除早期的数组值?这是我使用的代码:
def address_geo
arr = []
arr << do if do
arr << re if re
arr << me if me
arr << fa if fa
arr << so if so
arr << la if la
arr.reject{|y|y==''}.join(' ')
end
给出以下值
do = 'I'
re = 'am'
me = 'a'
fa = 'good'
so = 'good'
la = 'boy'
上述方法将产生:
I am a good good boy
我应该如何编写数组合并以拒绝fa
,只需要so
来产生:
I am a good boy
非常感谢!
答案 0 :(得分:4)
您可以使用Array#uniq
> arr = ['good', 'good']
> arr.uniq
=> ['good']
根据@ tokland的建议,如果你只想删除连续的重复项,这将有效(并支持ruby 1.8)。通过使用inject
构建新数组,我们可以过滤掉empty?
或与前一个字符串相同的每个字符串。
> %w(a good good boy).inject([]) do |mem, str|
> mem << str if !str.empty? && mem[-1] != str
> mem
> end
=> ['a', 'good', 'boy']
答案 1 :(得分:1)
您可以使用Enumerable#chunk删除数组中的连续元素:
strings = ["hi", "there", "there", "hi", "bye"].select { |x| x && !x.empty? }
strings.chunk { |x| x }.map(&:first).join(" ")
#=> "hi there hi bye"