Базовые сведения   Основные методы    Сортировка и экстремумы   Итераторы   Задания   References                          ...
Базовые сведения   Основные методы   Сортировка и экстремумы   Итераторы   Задания   ReferencesВведение           Иногда в...
Базовые сведения   Основные методы   Сортировка и экстремумы   Итераторы   Задания   ReferencesХэши и массивы             ...
Базовые сведения   Основные методы    Сортировка и экстремумы    Итераторы   Задания    ReferencesТабличная форма         ...
Базовые сведения   Основные методы   Сортировка и экстремумы   Итераторы   Задания   ReferencesСоздание хэша           Зад...
Базовые сведения     Основные методы   Сортировка и экстремумы    Итераторы   Задания   ReferencesМетоды работы с хэшем   ...
Базовые сведения   Основные методы   Сортировка и экстремумы   Итераторы   Задания   ReferencesМетоды работы с хэшем - 2  ...
Базовые сведения   Основные методы   Сортировка и экстремумы   Итераторы   Задания   ReferencesСортировка по ключу        ...
Базовые сведения   Основные методы     Сортировка и экстремумы     Итераторы    Задания     ReferencesСортировка по значен...
Базовые сведения   Основные методы   Сортировка и экстремумы   Итераторы    Задания    ReferencesМаксимальный и минимальны...
Базовые сведения   Основные методы   Сортировка и экстремумы    Итераторы    Задания    ReferencesПреобразование хэша в ма...
Базовые сведения   Основные методы     Сортировка и экстремумы       Итераторы     Задания      ReferencesИтераторы       ...
Базовые сведения   Основные методы   Сортировка и экстремумы   Итераторы   Задания   ReferencesРезультаты работы итераторо...
Базовые сведения   Основные методы     Сортировка и экстремумы      Итераторы     Задания    ReferencesАльтернативная запи...
Базовые сведения   Основные методы   Сортировка и экстремумы   Итераторы   Задания   ReferencesСумма           Допустим да...
Базовые сведения   Основные методы   Сортировка и экстремумы   Итераторы   Задания   ReferencesРазбор программы           ...
Базовые сведения   Основные методы   Сортировка и экстремумы   Итераторы   Задания   ReferencesИз массива в хэш           ...
Базовые сведения   Основные методы   Сортировка и экстремумы   Итераторы   Задания   ReferencesИз двумерного массива в хэш...
Базовые сведения   Основные методы   Сортировка и экстремумы   Итераторы   Задания   ReferencesЗадания           Дана стро...
Базовые сведения   Основные методы   Сортировка и экстремумы   Итераторы   Задания   ReferencesЗадания           Дан масси...
Базовые сведения   Основные методы   Сортировка и экстремумы   Итераторы   Задания   ReferencesЗадания           Дан двуме...
Базовые сведения   Основные методы   Сортировка и экстремумы   Итераторы   Задания   ReferencesReferences           При по...
Upcoming SlideShare
Loading in …5
×

Хэши в ruby

7,375 views

Published on

Принцип работы хэшей в ruby.

Published in: Education
2 Comments
2 Likes
Statistics
Notes
No Downloads
Views
Total views
7,375
On SlideShare
0
From Embeds
0
Number of Embeds
453
Actions
Shares
0
Downloads
54
Comments
2
Likes
2
Embeds 0
No embeds

No notes for slide

Хэши в ruby

  1. 1. Базовые сведения Основные методы Сортировка и экстремумы Итераторы Задания References Ruby: хэши Информатика 10-11 классы 15 февраля 2012 г. Информатика 10-11 классы Ruby: хэши
  2. 2. Базовые сведения Основные методы Сортировка и экстремумы Итераторы Задания ReferencesВведение Иногда возникает ситуация, когда применение массива является неудачным решением. Например, когда индексы расположены неравномерно, с большими пропусками, ведь как мы помним, ключи массива представляют собой последовательные натуральные числа + ноль. Эта проблема решается хэшами. Хэш это массив, ключами которого могут являться строки. Информатика 10-11 классы Ruby: хэши
  3. 3. Базовые сведения Основные методы Сортировка и экстремумы Итераторы Задания ReferencesХэши и массивы Информатика 10-11 классы Ruby: хэши
  4. 4. Базовые сведения Основные методы Сортировка и экстремумы Итераторы Задания ReferencesТабличная форма Рассмотрим хэш с оценками. В ruby такой хэш записывается следующим образом: Ключ Значение Listing 1: Создание хэша “kolya” 4 “petya” 5 hash = { " k o l y a " => 4, " petya " => 5, “sergey” 5 " sergey " => 5, “mamba” 2 "mamba" => 2 } где hash название массива. Чтобы вывести на экран, например, оценку Коли, достаточно написать puts hash["kolya"]. Информатика 10-11 классы Ruby: хэши
  5. 5. Базовые сведения Основные методы Сортировка и экстремумы Итераторы Задания ReferencesСоздание хэша Зададим тестовый хэш телефонных кодов стран. Listing 2: Способы создания хэша h a s h = { " R u s s i a " => 7 , "USA" => 1 , "UK" => 44} h a s h = Hash . new ( o r h a s h = { } ) hash [ " R u s s i a " ] = 7 h a s h [ "USA" ] = 1 h a s h [ "UK" ] = 44 ... 1 способ обычный, 2 ручной. Информатика 10-11 классы Ruby: хэши
  6. 6. Базовые сведения Основные методы Сортировка и экстремумы Итераторы Задания ReferencesМетоды работы с хэшем Рассмотрим хэш hash = { “vasya” => 5, “kolya” => 4, “petya” => 4 }. Метод Описание Результат hash.size количество пар 3 “ключ-значение” hash.keys массив ключей* [“vasya”, “kolya”, “petya”] hash.values массив значений* [5, 4, 4] hash.invert поменять ключи и значения {5 => “vasya”, 4 => “kolya”} местами** hash.max поиск максимальной пары [“vasya”, 5] hash.min поиск минимальной пары [“kolya”, 4] hash.delete(“vasya”) удалить элемент по ключу { “kolya” => 4, “petya” => 4 } * хэши в ruby неупорядочены: массивы могут иметь любой порядок элементов. ** при “перевороте” в случае совпадения значений будет выбрано первое. Информатика 10-11 классы Ruby: хэши
  7. 7. Базовые сведения Основные методы Сортировка и экстремумы Итераторы Задания ReferencesМетоды работы с хэшем - 2 Рассмотрим хэш hash = { “vasya” => 5, “kolya” => 4, “petya” => 4 }. Метод Описание Результат hash.empty? есть ли хоть один элемент false hash.key?(“vasya”) есть ли в хэше элемент true с ключом vasya hash.has_key?(“vasya”) аналогично true hash.include?(“vasya”) аналогично true hash.value?(3) есть ли в хэше элемент false со значением 3 hash.has_value?(3) аналогично false Информатика 10-11 классы Ruby: хэши
  8. 8. Базовые сведения Основные методы Сортировка и экстремумы Итераторы Задания ReferencesСортировка по ключу Как и массивы, хэши можно сортировать с помощью метода sort. Однако на выходе получается не хэш, а двумерный массив пар “ключ-значение”. Базово сортировка проводится по ключам, а не по значениям, как в массивах. Listing 3: Сортировка по ключам h a s h = { " abc " => 1 0 , " d e f " => 7 , " a a c " => 25} hash_sorted = hash . s o r t puts hash_sorted . i n s p e c t # [ [ " a a c " , 2 5 ] , [ " abc " , 1 0 ] , [ " d e f " , 7 ] ] Информатика 10-11 классы Ruby: хэши
  9. 9. Базовые сведения Основные методы Сортировка и экстремумы Итераторы Задания ReferencesСортировка по значению Для сортировки по значению есть специальный метод sort_by. На выходе опять получается не хэш, а двумерный массив пар “ключ-значение”. Listing 4: Сортировка по ключам h a s h = { " abc " => 1 0 , " d e f " => 7 , " a a c " => 25} h a s h _ s o r t e d = h a s h . s o r t _ b y { | key , v a l u e | v a l u e } puts hash_sorted . i n s p e c t # [ [ " d e f " , 7 ] , [ " abc " , 1 0 ] , [ " a a c " , 2 5 ] ] Информатика 10-11 классы Ruby: хэши
  10. 10. Базовые сведения Основные методы Сортировка и экстремумы Итераторы Задания ReferencesМаксимальный и минимальный элементы Максимальный и минимальный элементы хэша можно найти с помощью методов max, min, max_by, min_by. На выходе массив из двух элементов (ключ и значение). Первые два метода ищут экстремум по ключу, вторые два по условию. Listing 5: Максимальный и минимальный элементы h a s h = { " abc " => 1 0 , " d e f " => 7 , " a a c " => 25} p u t s h a s h . max # [ " d e f " , 7 ] p u t s h a s h . min # [ " a a c " , 2 5 ] p u t s h a s h . max_by{ | key , v a l u e | v a l u e } # [ " a a c " , 2 5 ] a r r = h a s h . min_by{ | key , v a l u e | v a l u e } puts arr # [" def " , 7] Информатика 10-11 классы Ruby: хэши
  11. 11. Базовые сведения Основные методы Сортировка и экстремумы Итераторы Задания ReferencesПреобразование хэша в массив Иногда в целях удобства (или исходя из технических особенностей, как в методах sort_by и пр.) хэши преобразуют в двумерный массив пар “ключ–значение”. Для преобразования используется метод to_a. Listing 6: Преобразование в массив h a s h = { " abc " => 1 0 , " d e f " => 7 , " a a c " => 25} a r r = h a s h . to_a В итоге в массив arr будет следующим: [ [“abd”, 10], [“def”, 7], [“aac”, 25] ] Информатика 10-11 классы Ruby: хэши
  12. 12. Базовые сведения Основные методы Сортировка и экстремумы Итераторы Задания ReferencesИтераторы Аналогично массивам для хэшей можно использовать методы map, find_all, inject. В качестве параметра–“ключа” внутри цикла появляется не просто обычная переменная, а массив из двух элементов ключа и значения! Listing 7: Итераторы hash = { " abc " => 1 0 , " d e f " => 7 , " a a c " => 25} res1 = h a s h . f i n d _ a l l { | a r r a y | a r r a y [ 1 ] < 20} res2 = h a s h . map { | a r r a y | a r r a y [ 1 ] ∗ 2 } res3 = h a s h . i n j e c t ( 0 ) { | r e s , a r r | r e s+a r r [ 1 ] } Что будет в каждой из переменных? Информатика 10-11 классы Ruby: хэши
  13. 13. Базовые сведения Основные методы Сортировка и экстремумы Итераторы Задания ReferencesРезультаты работы итераторов В переменной res1 окажется двумерный массив элементов, чьи значения меньше 20: [[“abc”, 10], [“def”, 7]]. Обратите внимание, что результатом вновь окажется именно массив, а не хэш. В переменной res2 окажется одномерный массив значений, умноженных на 2: [20, 50, 14]. В переменной res3 будет находиться сумма всех значений хэша: 42. NB: Не забывайте, что переменная–ключ, используемая в итератора, в случае хэша является массивом из двух элементов ключа и значения! Информатика 10-11 классы Ruby: хэши
  14. 14. Базовые сведения Основные методы Сортировка и экстремумы Итераторы Задания ReferencesАльтернативная запись итераторов Если массивы внутри итератора вызывают эстетическое отвращение, можно записать в виде переменных. Напишем ту же самую программу, но в другой форме. Обратите особое внимание на метод inject. Скобочки там стоят не для красоты! Listing 8: Альтернативная запись hash = { " abc " => 1 0 , " d e f " => 7 , " a a c " => 25} res1 = h a s h . f i n d _ a l l { | key , v a l u e | v a l u e < 20} res2 = h a s h . map { | key , v a l u e | v a l u e ∗2 } res3 = h a s h . i n j e c t ( 0 ) { | r e s , ( key , v a l u e ) | r e s+v a l u e } Информатика 10-11 классы Ruby: хэши
  15. 15. Базовые сведения Основные методы Сортировка и экстремумы Итераторы Задания ReferencesСумма Допустим даны оценки Васи: arr = [3, 5, 5, 4, 5, 2]. Определим, сколько раз и какую Оценку Вася получил. Listing 9: Повторяемость arr = [3 , 5 , 5 , 4 , 5 , 2] marks = a r r . i n j e c t ( Hash . new{ 0 } ) { | r e s , elem | r e s [ elem ] += 1 res } p u t s marks . i n s p e c t Информатика 10-11 классы Ruby: хэши
  16. 16. Базовые сведения Основные методы Сортировка и экстремумы Итераторы Задания ReferencesРазбор программы В данном примере мы используем развёрнутую нотацию метода inject. Конструкция Hash.new{ 0 } означает: создать пустой хэш и сделать любой несуществующий элемент по умолчанию равным нулю. Алгоритм: заведём хэш res, в котором ключами будут оценки, а значениями их количество. Изначально каждой оценки 0 штук. Пробегаем по всему массиву arr. Берём пробегаемую оценку и увеличиваем количество этих оценок в хэше res на 1. Результат выполнения inject записываем в хэш marks. Для полного вывода на экран переменной используем специальный метод inspect. Информатика 10-11 классы Ruby: хэши
  17. 17. Базовые сведения Основные методы Сортировка и экстремумы Итераторы Задания ReferencesИз массива в хэш Как преобразовать массив в хэш? Пусть дан массив arr. Как сделать чётные элементы ключами хэша, а нечётные значениями? Listing 10: Из массива в хэш a r r = [ " abc " , 1 0 , " d e f " , 7 ] h a s h = Hash [ ∗ a r r ] puts hash . i n s p e c t # {" abc "=>10, " d e f "=>7} Информатика 10-11 классы Ruby: хэши
  18. 18. Базовые сведения Основные методы Сортировка и экстремумы Итераторы Задания ReferencesИз двумерного массива в хэш А если массив двумерный? Пусть дан двумерный массив “ключ–значение” arr. Сделаем из него хэш. Для этого сначала “сплющим” массив методом flatten. Listing 11: Из массива в хэш a r r = [ [ " abc " , 1 0 ] , [ " d e f " , 7 ] ] h a s h = Hash [ ∗ a r r . f l a t t e n ] puts hash . i n s p e c t # {" abc "=>10, " d e f "=>7} Информатика 10-11 классы Ruby: хэши
  19. 19. Базовые сведения Основные методы Сортировка и экстремумы Итераторы Задания ReferencesЗадания Дана строка s. Посчитать, сколько раз какое слово там встречается? Предыдущая задача, только вывести ТОП-10 часто встречающихся слов в порядке убывания. Информатика 10-11 классы Ruby: хэши
  20. 20. Базовые сведения Основные методы Сортировка и экстремумы Итераторы Задания ReferencesЗадания Дан массив строк arr. Каждая строка содержит информацию в следующем формате: дата (число из двух цифр, затем символ ТОЧКА, затем месяц из двух цифр. Примеры: 13.02, 01.01), символ ПРОБЕЛ, температура в виде вещественного числа. Пример правильно оформленной строки (одной из многих в массиве): “02.11 -3.2”. Необходимо сосчитать среднемесячную температуру на каждый месяц, исходя из представленных данных и вывести её на экран по месяцам, начиная с января. Если на какой-либо месяц данные отсутствуют, то напротив этого месяца вывести словосочетание “данные отсутствуют”. Информатика 10-11 классы Ruby: хэши
  21. 21. Базовые сведения Основные методы Сортировка и экстремумы Итераторы Задания ReferencesЗадания Дан двумерный массив, состоящий из двух одномерных массивов равной длины. Составить из этого массива хэш, ключами которого являются элементы первого подмассива, а значениями второго. Пример: arr = [ [1,2,3], [4,5,6] ]. Из этого массива должен получиться хэш hash = { 1 => 4, 2 => 5, 3 => 6 }. Дан кусок текста в виде строковой переменной s. Посчитайте количество 10 любых союзов (например, “а”, “и”, “а то” и пр.) и выведите их в порядке встречаемости в тексте, начиная с самого часто встречающегося. Найти самое употребляемое слово во Вступлении к поэме А.С. Пушкина “Медный всадник”. Информатика 10-11 классы Ruby: хэши
  22. 22. Базовые сведения Основные методы Сортировка и экстремумы Итераторы Задания ReferencesReferences При подготовке данного материала использовались сайты: http://ru.wikibooks.org/wiki/Ruby, http://rubydev.ru, http://en.wikipedia.org, http://ruby-lang.org. Все презентации доступны на http://school.smirik.ru! Вопросы, предложения, д/з: smirik@gmail.com Информатика 10-11 классы Ruby: хэши

×