Программирование на языке Ruby
Программирование на языке Ruby читать книгу онлайн
Внимание! Книга может содержать контент только для совершеннолетних. Для несовершеннолетних чтение данного контента СТРОГО ЗАПРЕЩЕНО! Если в книге присутствует наличие пропаганды ЛГБТ и другого, запрещенного контента - просьба написать на почту [email protected] для удаления материала
Оператор
<<
x = [1, 5, 9]
x << 13 # x равно [1, 5, 9, 13]
x << 17 << 21 # x равно [1, 5, 9, 13, 17, 21].
Аналогичную операцию выполняют методы
unshift
push
Массивы можно конкатенировать методом
concat
+
+=
x = [1,2]
y = [3,4]
z = [5,6]
b = y + z # [3,4,5,6]
b += x # [3,4,5,6,1,2]
z.concat у # z равно [5,6,3,4]
Имейте в виду, что оператор
+=
<<
a = [1,2]
b = [3,4]
a += b # [1,2,3,4]
a = [1,2]
b = [3,4]
а << b # [1,2, [3,4]]
a = [1,2]
b = [3,4]
а = a.concat(b) # [1,2,3,4]
8.1.17. Использование массива в качестве стека или очереди
Базовые операции со стеком называются
push
pop
shift
unshift
<<
push
Постарайтесь не запутаться. Методы
shift
unshift
push
pop
<<
Эта тема будет продолжена в разделе 9.2.
8.1.18. Обход массива
Как и следовало ожидать, в классе
Array
each
Метод
reverse_each
reverse
each
words = %w(Son I am able she said)
str = ""
words.reverse_each { |W| str += "#{w} "}
# str равно "said she able am I Son "
Если нужно только перебрать все индексы, можно воспользоваться итератором
each_index
x.each_index
(0..(x.size-1)).each
Итератор
each_with_index
Comparable
x = ["alpha", "beta", "gamma"]
x.each_with_index do |x,i|
puts "Элемент #{i} равен #{x}"
end
# Выводятся три строки.
Предположим, что нужно обойти массив в случайном порядке. Ниже представлен итератор
random_each
randomize
class Array
# Предполагается, что метод randomize определен.
def random_each
temp = self.randomize
temp.each {|x| yield x}
end
end
dwarves = %w(Sleepy Dopey Happy Sneezy Grumpy Bashful Doc)
list = ""
dwarves.random_each (|x| list += "#{x} "}
# list равен:
# "Bashful Dopey Sleepy Happy Grumpy Doc Sneezy "
# (Ha вашей машине порядок может быть другим.)
8.1.19. Преобразование массива в строку с разделителями
Часто требуется вставить разделители между элементами массива, но не перед первым и не после последнего. Для этого предназначены метод
join
*
been_there = ["Veni", "vidi", "vici."]
journal = been_there.join(", ") # "Veni, vidi, vici."
letters = ["Phi","Mu","Alpha"]
musicians = letters.join(" ") # "Phi Mu Alpha"
people = ["Bob","Carol","Ted","Alice"] movie = people * " and "
# movie равно "Bob and Carol and Ted and Alice"
Если необходимо обрабатывать последний элемент особым образом, например вставить перед ним слово «and», это можно сделать вручную: