8.1.7. Специализированные функции индексирования
8.1.7. Специализированные функции индексирования
Для отображения индексов на элементы массива интерпретатор языка пользуется функцией индексирования. Поскольку методы доступа к элементам массива можно переопределять, мы можем реализовать любой способ индексирования.
Например, ниже реализован массив, в котором индексы начинаются с 1, а не с нуля:
class Array2 < Array
def [] (index)
if index>0
super(index-1)
else
raise IndexError
end
end
def []=(index,obj)
if index>0
super(index-1,obj)
else
raise IndexError
end
end
end
x = Array2.new
x[1]=5
x[2]=3
x[0]=1 # Ошибка.
x[-1]=1 # Ошибка.
Отметим, что отрицательные индексы (от конца массива) здесь запрещены. Имейте в виду, что в реальной задаче придется внести и другие изменения, например переопределить метод slice и пр. Но общую идею вы поняли.
Аналогичный подход можно применить для реализации многомерных массивов (мы еще вернемся к ним в разделе 8.1.11).
Можно также реализовать нечто вроде треугольной матрицы, как показано ниже. Это частный случай двумерного массива, в котором элемент в позиции x,y совпадает с элементом в позиции y,x (поэтому хранить можно только один). Иногда это бывает полезно, например для хранения неориентированного графа (как мы покажем ближе к концу главы).
class TriMatrix
def initialize
@store = []
end
def [](x,y)
if x > у
index = (x*x+x)/2 + y
@store[index]
else
raise IndexError
end
end
def []=(x,y,v)
if x > y
index = (x*x+x)/2 + y
@store[index] = v
else
raise IndexError
end
end
end
t = TriMatrix.new
t[3,2] = 1
puts t[3,2] # 1
puts t[2,3] # IndexError
В этом примере мы реализовали матрицу так, что номер строки должен быть больше или равен номеру столбца. Но можно было бы просто отобразить симметричные пары индексов на один и тот же элемент. Проектное решение зависит от предполагаемого способа использования матрицы.
Можно было унаследовать классу Array, но нам кажется, что наше решение понять легче. Формула индексирования довольно сложна, но десяти минут с карандашом и бумагой хватит, чтобы убедить любого в ее правильности. Чтобы сделать данный класс по-настоящему полезным, надо бы немного усовершенствовать его; оставляем вам это в качестве упражнения.
Кроме того, треугольную матрицу можно реализовать в виде массива, содержащего массивы, размер которых увеличивается по мере увеличения номера строки. Примерно так мы и поступили в разделе 8.1.11. Нетривиальная задача — гарантировать, что строка случайно не окажется больше, чем положено.
Более 800 000 книг и аудиокниг! 📚
Получи 2 месяца Литрес Подписки в подарок и наслаждайся неограниченным чтением
ПОЛУЧИТЬ ПОДАРОКДанный текст является ознакомительным фрагментом.
Читайте также
Функции
Функции Функции в JScript, как и в других алгоритмических языках, позволяют объединить несколько операций под одним именем. В случае необходимости функция может быть вызвана из любого места сценария.В сценариях JScript поддерживаются два вида функций: встроенные функции и
Функции
Функции Функция — это особым образом написанный и оформленный фрагмент кода JavaScript, который можно вызвать из любого Web-сценария на данной Web-странице (повторно используемый код, как его часто называют). Так что, если какой-то фрагмент кода встречается в нескольких местах
Функции
Функции Функция — это особым образом написанный и оформленный фрагмент кода JavaScript, который можно вызвать из любого Web-сценария на данной Web- странице (повторно используемый код, как его часто называют). Так что, если ка- кой-то фрагмент кода встречается в нескольких местах
Специализированные цифровые телефоны
Специализированные цифровые телефоны С развитием цифровых систем коммутации в 1980-х и 1990-х годах телекоммуникационные компании разработали цифровые офисную АТС (Private Branch eXchanges, PBXes) и малую АТС (Key Telephone Systems, KTSes). Разработанные для них специализированные телефоны были
Специализированные сообщества
Специализированные сообщества На сайте «Сообщество менеджеров» – http://www.e-xecutive.ru– размещены интервью различных интересных личностей, а зарегистрированные члены сообщества могут общаться между собой (рис. 3.5).Форум менеджеров также успешно работает на сайте ассоциации
8.6. Функции
8.6. Функции Оператор определения функции имеет следующий синтаксис:[function] имя() { список}Определять функцию можно в любом месте сценария, но вызов ее должен осуществляться строго после описания. Вызывается функция подобно любой команде — по имени. Переданные ей аргументы
Параметры индексирования
Параметры индексирования Даже несмотря на то, что Windows 7 поразительно и, можно сказать, подозрительно быстро работает, вы можете сами влиять на то, что и как будет индексировано, для того, чтобы ускорить доступ к элементам файловой системы. С помощью механизма Параметры
Служба индексирования
Служба индексирования Служба предназначена для индексации содержимого файлов на локальном диске с целью быстрого поиска при помощи оснастки ciadv.msc. В следующей главе будет подробно рассмотрена данная оснастка и работа с ней, а пока поговорим о службе. Служба
Служба индексирования
Служба индексирования Раньше служба индексирования уже рассматривалась с точки зрения параметров реестра, влияющих на ее производительность. Сейчас же будет рассмотрена оснастка Служба индексирования: как с ее помощью определить каталоги для индексирования, а также
Форумы и специализированные доски объявлений
Форумы и специализированные доски объявлений По сути – те же чаты, но утратившие львиную долю своей дикости и хаотичности. Общение здесь происходит уже в «отложенном» режиме, так что есть время подумать над ответами. Да и анонимности на форумах поменьше. Кроме того,
4.5.3. Функции, которые создают новые конфигурации из существующих 4.5.3.1. Функции геометрии, которые производят новые конфигурации
4.5.3. Функции, которые создают новые конфигурации из существующих 4.5.3.1. Функции геометрии, которые производят новые конфигурации Раздел "4.5.2. Функции Geometry" обсуждает несколько функций, которые создают новые конфигурации из
Настройки индексирования
Настройки индексирования В состав операционной системы Windows Vista входит служба индексирования файлов. Работа этой службы по умолчанию включена.Вы можете ограничить возможности индексирования файлов с помощью следующих параметров REG_DWORD-типа ветви реестра
Специализированные ЭВМ, разработанные под руководством С. А. Лебедева
Специализированные ЭВМ, разработанные под руководством С. А. Лебедева «Диана-1», «Диана-2»Окончание разработки и проведение испытаний в 1955 году.Основные характеристики: ЭВМ последовательного действия с коммутируемой программой обработки. «Диана-2»: фиксированная