Помогите с многомерными массивами в Ruby - PullRequest
2 голосов
/ 29 ноября 2009

У меня есть этот код для разделения строки на группы по 3 байта:

str="hello"
ix=0, iy=0
bytes=[]
tby=[]
str.each_byte do |c|
    if iy==3 
        iy=0
        bytes[ix]=[]
        tby.each_index do |i|
            bytes[ix][i]=tby[i]
        end
        ix+=1
    end
    tby[iy]=c
    iy+=1
end
puts bytes

Я основал его на этом примере: http://www.ruby -forum.com / topic / 75570

Однако я получаю ошибки типа от этого. Спасибо.

Ответы [ 2 ]

6 голосов
/ 29 ноября 2009

ix = 0, iy = 0 переводится в ix = [0, (iy = 0)], поэтому вы получаете ошибку типа.

Однако есть менее «процедурный» способ сделать то, что вы хотите сделать:

Для рубина 1.8.7 +:

"hello world".each_byte.each_slice(3).to_a
#=> [[104, 101, 108], [108, 111, 32], [119, 111, 114], [108, 100]]

Для рубина 1.8.6:

require 'enumerator'
"hello world".enum_for(:each_byte).enum_for(:each_slice, 3).to_a
2 голосов
/ 29 ноября 2009

Ваша проблема в линии

ix=0, iy=0

Устанавливает значение ix для массива дважды 0, а для iy - 0. Вы должны заменить его на

ix, iy = 0, 0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...