Выберите вложенный массив в массиве из arugment в Ruby - PullRequest
0 голосов
/ 09 марта 2012

У меня есть массив:

foo = [[51, 05,1.0],[51,979,0.18]]

То, что я хотел бы сделать, это взять этот массив и выбрать все вложенные массивы, которые имеют последнее значение меньше 1. Таким образом, вывод из приведенного выше будет

result = [[51,979,0.18]]

Я пытался:

foo.select { |p| p.last < 1 }

Но я получаю ошибку:

NoMethodError (undefined method `last' 

Массив намного больше, чем просто два, но я перечислил вышекак пример.Я думал, что .select будет правильным, но я не могу заставить его работать.

Ответы [ 4 ]

3 голосов
/ 09 марта 2012

Ваш код работает для меня.

irb(main):007:0> foo = [[51, 05,1.0],[51,979,0.18]]
=> [[51, 5, 1.0], [51, 979, 0.18]]
irb(main):008:0> foo.select { |p| p.last < 1 }
=> [[51, 979, 0.18]]
2 голосов
/ 09 марта 2012

Если вы считаете, что в ваших данных могут существовать плохие значения, стоит их защитить:

foo = [ [51, 05,1.0], [51,979,0.18], 4, nil, {:foo => :bar} ]

foo.select do |x|
    if (x.respond_to?(:last))
        x.last < 1
    else
        # the warn call evaluates to nil, thus skipping this element
        warn("#{x.class} does not respond to method last")
    end
end
1 голос
/ 09 марта 2012

что по этому поводу?

foo.select { |p| p.at(-1) < 1 }
1 голос
/ 09 марта 2012

ты был так близко!вместо p.last используйте p [-1]

, поэтому

foo.select{ |p| p[-1] < 1}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...