[Ruby] Rozbicie tablicy


(Rxprojekt) #1

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??


(soanvig) #2
string = "wafel wafel"

string.chars.to_a

A dalej se kombinuj :slight_smile:


(Rxprojekt) #3

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 …


(Frankfurterium) #4

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.


(soanvig) #5

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.


(P) #6

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"

(soanvig) #7

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

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