Ruby Array - наибольшее целое число - PullRequest
0 голосов
/ 03 августа 2011

новичок в Ruby, и это нравится.Просто поиграем с кодом ниже:

    public
    def highest 
      highest_number = 0
      each do |number|
        number = number.to_i
        highest_number = number if number > highest_number
        puts highest_number 
      end
    end


    array = %w{1 2 4 5 3 8 22 929 1000 2}
    array.highest

Итак, в данный момент я получаю ответ:

    1
    2
    4
    5
    5
    8
    22
    929
    1000
    1000

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

Я поиграл с этим и не могу понять!Извините за такой вопрос новичка

Ответы [ 3 ]

7 голосов
/ 03 августа 2011

Проблема в том, что у вас есть оператор puts внутри цикла each, поэтому во время каждой итерации он выводит, какое наибольшее число в данный момент.Попробуйте переместить его за пределы цикла each, чтобы получить следующее значение:

public

def highest
  highest_number = 0
  each do |number| 
    number = number.to_i
    highest_number = number if number > highest_number
  end
  puts highest_number
end

array = %w{1 2 4 5 3 8 22 929 1000 2}
array.highest

, которое дает желаемый результат:

1000
5 голосов
/ 04 августа 2011

Вы также можете избежать неприятностей, используя max_by:

>> a = %w{1 2 4 5 3 8 22 929 1000 2}
=> ["1", "2", "4", "5", "3", "8", "22", "929", "1000", "2"]
>> m = a.max_by { |e| e.to_i }
=> "1000"

Вы также можете использовать другую версию max_by:

m = a.max_by(&:to_i)

, чтобы избежать лишнего шума "блока, который просто вызывает метод".

Но это, вероятно, упражнение по изучению блоков Ruby, поэтому использование существующих частей стандартных библиотек не считается. OTOH, хорошо знать, что находится в стандартных библиотеках, поэтому добавление к max_by или max также будет считаться учебным упражнением.

1 голос
/ 03 августа 2011

Вы можете сделать это вместо этого и избежать переменной highest_number.

array = %w{1 2 4 5 3 8 22 929 1000 2}

class Array
  def highest
    collect { |x| x.to_i }. \
    sort.                   \
    last.to_i
  end
end

array.highest # 1000

В этом случае collect { |x| x.to_i } также можно записать как collect(&:to_i).

...