[Ruby] Rozbicie tablicy

Witam. Jak rozbić tablicę (jednolitą) z danymi na 32 kawałki?? (Wielkość każdego z partów nie ma znaczenia, ważne byle było ich równo 32) ??

Np. mam takie coś [“JAKIES TAM DANE, W TYM BINARNE”] i chce rozbić to na 32 kawałki (wielkość każdego nie ma znaczenia, byle były 32). I jeszcze żeby jak nie ma tyle zawartości by podzielić na 32 części to by dopisało nil reszczie.

Pomożecie??

string = "wafel wafel"

string.chars.to_a

A dalej se kombinuj :slight_smile:

To mi rozbija tablicę na ilośc elementów :stuck_out_tongue_winking_eye:

Jeśli bym teraz wykonał iterację na każdym z nich i mieszanie to szybko by to się nie odbyło…

Zależy mi na jak najszybszym stworzeniu 32 elementowej tablicy, by pomieszać ją według mojego alg.

Zależy mi na szybkości działania …

Kompletnie nie znam się na Rubim, ale pewnie macie coś w stylu tablic mieszających (hash table). Operacje na nich są sporo szybsze niż na “zwykłych” odpowiednikach.

Narzew

Popełniłem tam literówkę, zamiast “word” miało być “string”. To ci rozbija string na poszczególne znaki. Teraz możesz podliczyć znaki i dodać do tablicy tyle pustych pól ile trzeba:

string = "wafel wafel"

string = string.chars.to_a

howmuch = 32 - string.count

for i in 1..howmuch do

 string.push(nil)

end

Żeby nie było - z twojego objaśnienia w pierwszym poście zrozumiałem, że masz tablicę, w tablicy masz string i chcesz go rozbić na 32 elementy.

Nie wyobrażam sobie, żeby dało się to zrobić prościej i iteracja po całej tablicy wydaje się być logiczna. Prawdę mówiąc to wcale nie jest aż tak wolne, żeby trzeba było to przyspieszać jakimiś kosmicznymi sposobami.

To co podałeś będzie działać tylko gdy ciąg znaków ma 32 elementy albo mniej.

Pierwsza rzecz jaka przychodzi mi do głowy:

def foo a

	if a.size < 32

		return a.chars.to_a + Array.new(32 - a.size, nil)

	else

		return a.split(//, 32)

	end

end


a = foo 'abcdef'

print a, ' ', a.size, "\n"

a = foo 'qazxswedcvfrtgbnhyujmkiolpqazxswedcvfr'

print a, ' ', a.size, "\n"

Ja podałem samo rozbijanie. Zakładam, że Narzew robi przed tym walidację.

Mimo to pomysł z dodaniem tablicy, zamiast pushowania jest dobry :smiley: