Forum Webscript.Ru
Программирование => Perl => Тема начата: Error202 от 28 Сентября 2006, 11:50:00
-
Как можно выбрать случайны эл-т массива, чтобы он был не равный 0?
И можно ли как-нть стандартно удалить какой-нть эл-т массива по его индексу?
-
Как удалить я вспомнил...
-
DB<1> @m = (a,c,d,f,r)
DB<2> print $m[int rand (scalar @m)]
d
DB<3> print $m[int rand (scalar @m)]
c
-
NeoNox
не равный нулю...
Error202
my @m = (1,0,0,0,0,0,1,2);
my $el;
while (1)
{
$el=$m[int rand (scalar @m)];
last unless ($el==0);
}
print $el;
-
Удалить элемент из массива нельзя, его можно только сделать неопределенным. Или перестроить весь массив.
-
KiLLjoY aka SerZH
DB<1> @a = (a,b,c)
DB<2> splice(@a,0,1)
DB<3> p @a
bc
DB<4> p scalar @a
2
DB<5> p $a[0]
b
commander
Так и есть, это просто подсказка. Я не совсем понял что нужно игнорировать, нулевой элемент масива или элемент со значением ноль.
-
commander
commander:
while (1)
{
$el=$m[int rand (scalar @m)];
last unless ($el==0);
}
print $el;
охренеть ;) особенно для массива @a = (0,0,0,0);
-
Green Kakadu
Гы...
-
Error202
@ma = (1,0,2,0,3,0,4,0);
foreach (@ma) {
if ($_ != 0) { push @new, "$_"; }
}
print "$new[rand @new]";
-
print (grep { $_ != 0 } @ma)[ int rand scalar grep { $_ != 0 } @ma ];
Yaroslav
push @new, $_ if ($_ != 0);
лучше читается и короче пишется. Просто совет.