Масиви Ruby
Вступ n n n Одним з базових типів змінних є масив. Раніше ми розглядали змінні типу число (integer, float), трохи рядка (string). (Формально): Масив - ряд змінних, доступ до яких визначено за індексом. (Спрощено): Масив група змінних, прономераних починаючи з нуля, що зберігаються в єдиній змінній. Масиви дозволяють спростити доступ до однотипних даних. Наприклад, у вигляді масиву легко зберігати температуру за 30 останніх днів. Масиви бувають двовимірними коли елементи масиву самі є масивами.
Таблична форма n Ключ Значення 0 5, 3 1 4. 2 n Створення масиву: arr = [ 5. 3, 4. 2, 2. 0, − 0. 8, 1. 5 ] n 2 2. 0 3 -0. 8 4 1. 5 Розглянемо масив, що складається з 5 елементів (див. таблицю ліворуч) В ruby такий масив записується наступним чином: n де arr - назва масиву Щоб вивести на екран, наприклад, елемент з ключем 3 достатньо написати puts arr[3]
n Задамо масив, що складається з 6 послідовних натуральних чисел. Способи створення масивів: arr = [1, 2, 3, 4, 5, 6] Звичайний спосіб arr = Array new arr [0] = 1 arr [1] = 2 arr [] = 3. . . Ручний arr = (1. . 6 ). to_a
Методи n n n Щоб змінити масив, до нього потрібно застосувати так званий метод. Метод це те, що змінює змінну за заданим правилом. Наприклад, метод sort сортує масив. Для різних типів змінних можуть бути різні методи. Щоб застосувати до змінної VAR метод method досить написати: Застосування методу: var. method n Зверніть увагу! Звичайний метод не змінює саму змінну. Хочете змінити привласніть результат іншої змінної або цієї ж самої (var = var. method)
Методи роботи з масивом n Розглянемо масив arr = [6, 3, 5, 1, 2, 4]. Метод Опис Результат arr. size кількість елементів 6 arr. min мінімальний елемент 1 arr. max максимальний елемент 6 arr. sort сортування [1, 2, 3, 4, 5, 6] arr. reverse перевернути [4, 2, 1, 5, 3, 6] arr. sort. reverse відсортувати і перевернути [6, 5, 4, 3, 2, 1] arr. include? (6) чи є в масиві елемент 6 true arr. empty? порожній чи массив false arr. any? чи є хоч один елемент true arr. delete(6) видалити елемент 6 * [3, 5, 1, 2, 4] arr. delete_at(1) видалити елемент з ключем 1 [6, 5, 1, 2, 4]
Сума n n Припустимо дана середня температура за 5 днів: arr = [5. 3, 2. 1, 5. 2, 1. 8, -0. 2]. Як обчислити суму? Сума arr = [ 5. 3, 2. 1, 5. 2, 1. 8, -0. 2] sum = arr. inject ( 0 ) { | res, elem | res+elem }
Розбір методу inject Загальний вигляд inject res = arr. inject (start) {| result, element | expression} n n start чому початково дорівнює змінна result. Наприклад, якщо всередені inject ви будете перемножувати, то не можна робити змінну рівною нулю, так як множення будь-якого числа на нуль дає нуль. result - змінна, в яку записується результат. element поточний елемент масиву (змінна змінюється з кожною ітерацією). expression - вираз для змінних result і element.
Завдання n n Напишіть програму, яка обчислює за допомогою inject добуток елементів масиву (масив можна задати будь-який). Напишіть програму, яка обчислює середнє арифметичне і середнє геометричне елементів масиву.
Пошук елементів n n n У ряді завдань нам потрібно дістати з масиву певні елементи. Припустимо дана середня температура за 5 днів: arr = [5. 3, 2. 1, 1. 2, -0. 8, -0. 2]. Обчислимо, скільки днів була негатична температура. Метод find_all arr = [ 5. 3, 2. 1, 1. 2, -0. 8, -0. 2] arr_neg = arr. find_all{ | elem | ( elem < 0 ) } puts arr_neg. size puts [ 5. 3, 2. 1, 1. 2, -0. 8, -0. 2 ]. find_all { | elem | ( elem > 0 ) }. size
Розбір методу find_all Загальний вигляд find_all arr_res = arr. find_all {| element | condition} n n n element поточний (розглянутий) елемент масиву (змінна змінюється з кожною итерацією). condition логічний вираз або декілька виразів, пов'язаних логічними операціями (кон'юнкція, диз'юнкція, заперечення). Метод дістає з масиву arr всі елементи, що задовольняють умові condition, і записує результат в масив arr_res.
Завдання n n Дано масив з 10 цілих чисел (будьяких). Вивести на екран всі елементи масиву, менше нуля і діляться на три. Дано масив з 10 цілих чисел (будьяких). Вивести на екран суму всіх парних позитивних елементів масиву.
Зміна елементів масиву n n Припустимо, у нас є масив цін на нафту в доларах США за останні 5 днів. Як перевести всі ціни в гривні, знаючи курс гривні по відношенню до долара? Метод map arr = [99. 23 , 101. 42 , 99. 87 , 96. 49 , 95. 11] usd_to_rub = 3 1. 2 3 arr_in_rub = arr. map { | elem ∗ usd_to_rub } puts arr_in_rub
Розбір методу map Загальний вигляд map arr_res = arr. map{|element|expression} n n n element поточний (розглянутий) елемент масиву (змінна змінюється з кожною итерацией). expression вираз, що показує, як треба міняти елемент масиву. Метод проходить по всьому масиву arr і змінює кожен елемент у відповідності з виразом expression. Результат записується вмасив arr_res.
Завдання n Дано масив температури за останні 10 днів (будь-які розумнічисла) в градусах за Цельсієм. Вивести на екран температуру накожен день в градусах за Фаренгейтом і по Кульвіну