Программирование на языке 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].Аналогичную операцию выполняют методы
unshiftpushМассивы можно конкатенировать методом
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. Использование массива в качестве стека или очереди
Базовые операции со стеком называются
pushpopshiftunshift<<pushПостарайтесь не запутаться. Методы
shiftunshiftpushpop<<Эта тема будет продолжена в разделе 9.2.
8.1.18. Обход массива
Как и следовало ожидать, в классе
ArrayeachМетод
reverse_eachreverseeachwords = %w(Son I am able she said)str = ""words.reverse_each { |W| str += "#{w} "}# str равно "said she able am I Son "Если нужно только перебрать все индексы, можно воспользоваться итератором
each_indexx.each_index(0..(x.size-1)).eachИтератор
each_with_indexComparablex = ["alpha", "beta", "gamma"]x.each_with_index do |x,i| puts "Элемент #{i} равен #{x}"end# Выводятся три строки.Предположим, что нужно обойти массив в случайном порядке. Ниже представлен итератор
random_eachrandomizeclass Array # Предполагается, что метод randomize определен. def random_each temp = self.randomize temp.each {|x| yield x} endenddwarves = %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», это можно сделать вручную:
