LINUX.ORG.RU

Ruby, двумерный массив


0

0

Доки читал. Массив массивов, все дела... Пример сознательно упрощённый, так как даже он не работает.

$,=' '
$\=''
a=[[2..12],[3..13]]

for i in 2..12
for k in 3..13
a[i,k]=i*k
end
end

for i in 2..12
for k in 3..13
print a[i,k]
end
print "\n"
end

Выводит не ожидаемую таблицу умножения, а что-то совсем непонятное. Где подвох?

И да, надо чтобы индексы массива строго начинались НЕ с нуля/единицы, это принципиально.


1. a=[[2..12],[3..13]] - что это должно быть? У тебя здесь массив с 2 элементами типа Range

2. a[i,k] - разве не a[i][k]?

PartyZan ★★★
()
Ответ на: комментарий от PartyZan

> a=[[2..12],[3..13]] - что это должно быть?

двумерный массив с индексами от 2 до 12 "по вертикали" и от 3 до 13 "по горизонтали". Если так совсем никак нельзя сделать, просто двумерный массив размером n*m.

.to_a после диапазонов делал, эффект тот же.

> a[i,k] - разве не a[i][k]

На второй вариант руби сильно-сильно ругается...

tx
() автор топика
Ответ на: комментарий от tx

В массиве индексы не могу начинаться с произвольного индекса. То что ты пытаешься сделать - есть массив, каждым элементом которого является массив с единственным элементом - Range

PartyZan ★★★
()
Ответ на: комментарий от PartyZan

Хорошо, как создать двумерный массив n*m и как потом обращаться к каждому элементу?

tx
() автор топика
Ответ на: комментарий от tx

В общем сам и нашёл что-то похожее на то что надо - http://ruby.inuse.ru/forum/dvumernyi-massiv-help

Странно, я думал такая простая вещь как создание таблички n*m будет делаться в Ruby как-то более интуитивно.

tx
() автор топика

> Выводит не ожидаемую таблицу умножения, а что-то совсем непонятное. Где подвох?

Ты неправильно создаешь массив. Надо как-то вот так:

a = [Array.new(10), Array.new(10)]

a.each_index {|i|
  a[i].each_index{|j|
    a[i][j] = (i+2)*(j+3)
  }
}

a.each {|i|
  puts i
}

> И да, надо чтобы индексы массива строго начинались НЕ с нуля/единицы, это принципиально.

Если это прямо так принципиально, то делай свой класс тогда. 

smh ★★★
()
Ответ на: комментарий от tx

И кстати вот это

a = [Array.new(10), Array.new(10)]

всё-таки неподходящий вариант.

Он даёт табличку 2x10, а не 10x10 как нужно. Вариант с "map!" делает всё правильно.

tx
() автор топика
Ответ на: комментарий от tx

> Он даёт табличку 2x10, а не 10x10 как нужно. Вариант с "map!" делает всё правильно.

Вариант с map это обобщенный вариант того, что я тебе показал.

smh ★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.