#ruby #итераторы
def isfin? @matrix[0..@col_count-1][0]==0 end Как пользоваться итераторами в Ruby? Например, нужно вернуть true, если все элементы массива [n][0] (где n от 0 до "длина массива - 1") равны нулю. Или в данном случае лучше использовать простой цикл? Например, если у нас будет 0..200, и на второй позиции уже не 0, то можно выйти с false и не просматривать остальные элементы. Или при использовании итераторов это условие будет автоматически учтено, и медленнее работать не будет?
Ответы
Ответ 1
Во-первых, судя по собаке, речь идет о методе собственного класса. Я бы рекомендовал не воротить никакого ООП, пока не знаешь сам язык и stdlib. def isfin? @matrix.all? do |row| row[0] == 0 end end Итератор all? здесь обрывается и возвращает false как только блок do end вернет false. Можно переписать это таким образом, что матрицу сначала транспонируем, и проверяем лишь одномерный массив: def isfin? @matrix.transpose.first.all? do |cell| cell == 0 end end И тогда использование стандартного метода .zero? позволяет записать это короче: def isfin? @matrix.transpose.first.all? &:zero? end А можно .map вместо .tranpose использовать -- это может работать быстрей: def isfin? @matrix.map(&:first).all? &:zero? end
Комментариев нет:
Отправить комментарий