Программирование на языке Ruby
Программирование на языке Ruby читать книгу онлайн
Внимание! Книга может содержать контент только для совершеннолетних. Для несовершеннолетних чтение данного контента СТРОГО ЗАПРЕЩЕНО! Если в книге присутствует наличие пропаганды ЛГБТ и другого, запрещенного контента - просьба написать на почту [email protected] для удаления материала
a = Array.newa[0]="x"a[3]="y"# а равно ["x", nil, nil, "y"]Но, допустим, нам требуется, чтобы новые элементы получали другое значение. Тогда в качестве конкретного применения общего принципа предлагаем класс
ZArrayclass ZArray < Array def [](x) if x > size for i in size+1..x self[i]=0 end end v = super(x) end def []=(x,v) max = size super(x,v) if size - max > 1 (max..size-2).each do |i| self[i] = 0 end end endendnum = Zarray.newnum[1] = 1num[2] = 4num[5] = 25# num равно [0, 1, 4, 0, 0, 25]8.2. Хэши
Хэши еще называют ассоциативными массивами, словарями и т.д. Особенно хорошо эта структура данных знакома программистам на языках Perl и Java.
Массив можно представить как структуру, которая создает ассоциацию между индексом
xyxКлюч хэша может иметь произвольный тип. Как следствие, хэш является не последовательной структурой данных. Мы знаем, что в массиве четвертый элемент следует за третьим. А в хэше тип ключа может быть таким, что понятия следующего и предыдущего значения не определены. По этой (и по другим) причинам в Ruby нет обозначений, наводящих на мысль о том, что пары в хэше следуют в каком-то определенном порядке.
Можно считать, что хэш — это массив со специальным индексом или некий аналог «таблицы синонимов» в базе данных, только оба поля хранятся в памяти.
Как бы вы ни представляли себе хэш, это полезный и мощный инструмент программирования.
8.2.1. Создание нового хэша
Как и в случае с классом
Array[]a1c2a1 = Hash.[]("flat",3,"curved",2)a2 = Hash.[]("flat"=>3,"curved"=>2)b1 = Hash["flat",3,"curved",2]b2 = Hash["flat"=>3,"curved"=>2]c1 = {"flat",3,"curved",2}c2 = {"flat"=>3,"curved"=>2}# Для a1, b1 и c1 число элементов должно быть четным.Есть также метод
newnild = Hash.new # Создать пустой хэш.е = Hash.new(99) # Создать пустой хэш.f = Hash.new("а"=>3) # Создать пустой хэш.е["angled"] # 99e.inspect # {}f["b"] # {"а"=>3} (значением по умолчанию # является тоже хэш).f.inspect # {}8.2.2. Указание значения по умолчанию для хэша
Значением по умолчанию для хэша является объект, возвращаемый вместо
nilnildefault=Все отсутствующие ключи указывают на один и тот же объект по умолчанию, поэтому изменение данного объекта имеет побочный эффект.
а = Hash.new("missing") # Объект по умолчанию - строка "missing".a["hello"] # "missing"а.default="nothing"a["hello"] # "nothing"a["good"] << "bye" # "nothingbye"a.default # "nothingbye"Имеется также специальный метод экземпляра
fetchIndexErrorHashfetchа = {"flat",3,"curved",2,"angled",5}
