|
|
ru.cgi.perl- RU.CGI.PERL ------------------------------------------------------------------ From : Comoderator of RU.CGI.PERL 2:5020/400 21 Feb 2004 14:41:57 To : milon Subject : Moderatorial [+] (was: хитрый splice) -------------------------------------------------------------------------------- milon @ Sat, 21 Feb 2004 01:46:48 +0000 (UTC): m> здраствуй All. m> меня посетила такая проблема: m> есть хеш m> %h = ( m> 'field1' => [a1, ..., aM], m> ... m> 'fieldN' => [m1, ..., mM] m> ); m> на основании запроса юзверя делается m> выборка из этого хеша. результат - во всех m> массивах стало меньше значений. вернее m> появились значения, которые отображать m> не нужно. зная индексы лишних элементов, m> написал так: m> for my $i (@wastes) { m> for my $field (keys %h) { m> splice @{ $h{$field} }, $i, 1; m> } m> } m> плохо... m> в смысле: результат работы есть таблица, m> столбцы - поля, строки - значения. m> полей может быть много, скажем 30. m> значений совсем много, скажем >30. m> ...так вот таблица не выводится :( m> браузер подвисает с песочными часами. m> если выводить не таблицой, а скажем text/plain, m> то получается по разному: m> если строк скажем 40, то выводится 20 и всё, m> если 20, то выводится 10 и тоже всё - обрывается m> на полусло... вообщем пишу вот так: m> for my $i (@wastes) { m> for my $field (keys %h) { m> # splice @{ $h{$field} }, $i, 1; m> $h{$field}->[$i] = " "; m> } m> } m> работает, причет быстро, но это же не то... m> попробовал копировать собаку в другой массив, m> резать копию, а затем затирать оригинал. m> ну, просто было подозрение, что splice работает m> только с "настоящими" массивами, m> а @{ $h{$field} } - не настоящий. m> my @cp_fields; m> for my $i (@wastes) { m> for my $field (keys %h) { m> @cp_fields = @{ $h{$field} }; m> splice @cp_fields, $i, 1; m> $h{$field} = \@cp_fields; m> } m> } m> м-да. надо же что-то было делать... m> не помогло. m> не пойму в чем же проблема. m> ----------- m> Apache 2.0 m> perl 5.8 m> Linux RH9 Оффтопик. В RU.PERL. -- Artem Chuprina RFC2822: <ran@ran.pp.ru>, FIDO: 2:5020/122.256, ICQ: 13038757 --- ifmail v.2.15dev5.3 * Origin: Leninsky 45 home network (2:5020/400) Вернуться к списку тем, сортированных по:
Архивное /ru.cgi.perl/114773f2001b9.html, оценка из 5, голосов 10
|