Rozrzucanie wartości tablicy na n tablic.
23 stycznia, 2008
Kod, który zawsze potrzebowałem i zawsze stosowałem workaroundy. Chodzi o rozrzucenie wartości do n tablic. Przydatne przy fork(), gdzie każdy proces dostaje do obróbki swoją tablicę. Poniżej przykład, jak ładnie, szybko i deterministycznie rozrzucić te wartości.
#!/usr/bin/perl -w use strict; my $na_ile=5; my @a=(); my $tmp=1; my %data=(); # generujemy tablicę ze 104 elementami for (my $i=1;$i<=104;$i++){ push @a,$i; } # rozrzucamy elementy tablicy @a na $na_ile tablic # $data{$tmp} to referencja do tablicy... foreach my $value (@a){ push @{$data{$tmp}},$value; print "wrzucam $value na $tmp\n"; $tmp++; if ($tmp >= $na_ile){ $tmp=1; } } # wyświetlanie foreach my $tabela (sort keys %data){ print "wyswietlam tablice nr $tabela\n"; foreach (@{$data{$tabela}}){ print "$_\n"; } }
Nawiasem, use strict i -w dla niewprawionego to wzywanie. ;/ Ale bez tego z fork() się nie poszaleje. ;)
1. x napisał(a):
23 stycznia 2008, 20:27:50
prosciej byloby my @a=(1..101);
2. night napisał(a):
23 stycznia 2008, 22:46:46
Ładne, naprawdę ładne. Zapewne wykorzystam w najbliższej przyszłości. Dzięki! :)
3. Michał Górny napisał(a):
24 stycznia 2008, 06:43:09
List::MoreUtils, funkcja part().
4. rozie napisał(a):
24 stycznia 2008, 08:01:58
x: prawda. Zwykle nie generuję tablic wypełnionych kolejnymi wartościami.
Michał: fakt, nie znałem. Tylko nie wiem, czy chce mi się 'ciągać' moduł, który zastąpi 7 linii kodu. Plus, zwykle mam do czynienia z hashami, jednak.