如果在数组合并期间发现类似的值,则拒绝或删除Ruby数组



如果存在类似的值,我如何删除先前的数组值?下面是我使用的代码:

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

多谢!

可以使用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']

你可以用Enumerable#chunk:

删除数组中连续的元素
strings = ["hi", "there", "there", "hi", "bye"].select { |x| x && !x.empty? }
strings.chunk { |x| x }.map(&:first).join(" ")
#=> "hi there hi bye"

最新更新