8.1.11. Многомерные массивы

8.1.11. Многомерные массивы

Если для численного анализа вам нужны многомерные массивы, то в архиве приложений Ruby есть прекрасная библиотека NArray, которую написал Масахиро Танака (Masahiro Tanaka). Если необходим аппарат для работы с матрицами, обратитесь к стандартной библиотеке matrix.rb, которая была упомянута в разделе 5.10.

В следующем примере показан способ работы с многомерными массивами за счет перегрузки методов [] и []= для отображения элементов на вложенный массив. Представленный класс Array3 обеспечивает рудиментарные операции с трехмерными массивами, но он далеко не полон:

class Array3

 def initialize

  @store = [[[]]]

 end

 def [](a,b,c)

  if @store[a]==nil ||

   @store[a][b]==nil ||

   @store[a][b][c]==nil

   return nil

  else

   return @store[a][b][c]

  end

 end

 def []=(a,b,c,x)

  @store[a] = [[]] if @store[a]==nil

  @store[a][b] = [] if @store[a][b]==nil

  @store[a][b][с] = x

 end

end

x = Array3.new

x[0,0,0] = 5

x[0,0,1] = 6

x[1,2,31 = 99

puts x[1,2,3]

Единственное, чего мы реально добились, — так это удобного использования запятой в обозначении [x,y,z] вместо употребляемой в языке С нотации [x][у][z]. Если C-подобная нотация вас устраивает, можете просто воспользоваться вложенными массивами Ruby. Еще одно мелкое достоинство — предотвращение ситуации, когда объектом, от имени которого вызывается оператор [], оказывается nil.

Данный текст является ознакомительным фрагментом.



Поделитесь на страничке

Похожие главы из других книг:

Многомерные базы данных (MDD)

Из книги автора

Многомерные базы данных (MDD) Реляционные базы данных организованы в виде двумерных таблиц. В MDD имеется одно или несколько дополнительных измерений. Например, Вам надо оценить свои доходы от продаж, рассмотрев в отдельности сводки по товарам, по регионам и по времени. В


R.8.2.4 Массивы

Из книги автора

R.8.2.4 Массивы В описании T D, в котором D имеет видD1 [ выражение-константа opt ]описывается идентификатор типа "… массив T". Если выражение-константа присутствует (§R.5.19), то оно должно иметь целочисленный тип и значение, большее 0. Это выражение задает число элементов массива.


Массивы

Из книги автора

Массивы Для создания множества одинаковых объектов в 3ds Max есть специальная команда Array (Массив). Преимущество массивов заключается в том, что можно быстро создать большое количество объектов, сразу же указав, на сколько они будут сдвинуты, на какой угол повернуты и как


8.1. Массивы

Из книги автора

8.1. Массивы В Ruby массивы индексируются целыми числами; индексация начинается с нуля, как в языке С. На этом, впрочем, сходство и заканчивается.Массивы в Ruby динамические. Можно (хотя это и не обязательно) задать размер массива при создании. Но после создания он может расти без


8.1.11. Многомерные массивы

Из книги автора

8.1.11. Многомерные массивы Если для численного анализа вам нужны многомерные массивы, то в архиве приложений Ruby есть прекрасная библиотека NArray, которую написал Масахиро Танака (Masahiro Tanaka). Если необходим аппарат для работы с матрицами, обратитесь к стандартной библиотеке


Массивы

Из книги автора

Массивы Массив — это упорядоченная именованная совокупность однотипных значений, к которым можно обращаться по их порядковому номеру (индексу). Для описания массивов в языке Object Pascal используют следующие формы:• array [1..N1] of type — одномерный массив фиксированного размера


МАССИВЫ 

Из книги автора

МАССИВЫ      Вы уже знаете, что массив представляет собой группу элементов одного типа. Когда нам требуется для работы массив, мы сообщаем об этом компилятору при помощи операторов описания. Для создания массива компилятору необходимо знать тип данных и требуемый класс


УКАЗАТЕЛИ И МНОГОМЕРНЫЕ МАССИВЫ

Из книги автора

УКАЗАТЕЛИ И МНОГОМЕРНЫЕ МАССИВЫ      Как создать указатели для многомерных массивов? Чтобы найти ответ на этот вопрос, рассмотрим несколько примеров. Предположим, что у нас есть описания int zippo[4][2];  /* массив типа int                 из 4 строк и 2 столбцов */int *pri;    /*


Функции и многомерные массивы

Из книги автора

Функции и многомерные массивы      Предположим, что вы хотите иметь функцию, работающую с двумерным массивом, причем со всем целиком, а не с частями. Как вы запишите определения функции и ее описания? Подойдем к этому более конкретно и скажем, что нам нужна функция,


Массивы

Из книги автора

Массивы Во многих отношениях массивы являются простейшей структурой данных. Проще могут быть только такие базовые типы данных, как integer или Boolean. Массив (array) представляет собой последовательный список определенного количества элементов. Все элементы в массиве


Массивы

Из книги автора

Массивы Массивы представляют собой простейшую реализацию набора элементов, для которой можно использовать алгоритм последовательного поиска. Возможны два случая: первый - элементы массива расположены в произвольном порядке и второй - элементы отсортированы. Сначала


Массивы

Из книги автора

Массивы Предположим, что у нас имеется отсортированный массив. Как было показано ранее, алгоритм последовательного поиска даже при использовании выхода из цикла в случае отсутствия в списке искомого элемента принадлежит к классу O(n). Каким образом можно улучшить


3.9.1. Многомерные массивы

Из книги автора

3.9.1. Многомерные массивы В С++ есть возможность использовать многомерные массивы, при объявлении которых необходимо указать правую границу каждого измерения в отдельных квадратных скобках. Вот определение двумерного массива:int ia[ 4 ][ 3 ];Первая величина (4) задает


Многомерные массивы

Из книги автора

Многомерные массивы Firebird поддерживает многомерные массивы размерностью от 1 до 16. Например, следующий оператор определяет три столбца целочисленных массивов с двумя, тремя и четырьмя размерностями:CREATE TABLE BTABLE (/* хранит 4 строки по 5 элементов = 20 элементов */ARR_INT2 INTEGER[4,5],/* 6


Массивы

Из книги автора

Массивы В заключение этой дискуссии полезно рассмотреть пример контейнерного класса ARRAY, представляющего одномерный


Массивы

Из книги автора

Массивы Мы уже довольно много знаем о переменных и работе с ними. Но наши знания все еще неполны. Так, мы ничего пока не знаем о массивах — особом способе хранения данных, доступном в ActionScript. Давайте же выясним, что это