Forum Webscript.Ru

Программирование => Perl => Тема начата: Error202 от 28 Сентября 2006, 11:50:00

Название: Массивы
Отправлено: Error202 от 28 Сентября 2006, 11:50:00
Как можно выбрать случайны эл-т массива, чтобы он был не равный 0?

И можно ли как-нть стандартно удалить какой-нть эл-т массива по его индексу?
Название: Массивы
Отправлено: Error202 от 28 Сентября 2006, 12:43:00
Как удалить я вспомнил...
Название: Массивы
Отправлено: NeoNox от 28 Сентября 2006, 13:10:20
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
Название: Массивы
Отправлено: commander от 28 Сентября 2006, 13:54:06
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 от 29 Сентября 2006, 12:55:46
Удалить элемент из массива нельзя, его можно только сделать неопределенным. Или перестроить весь массив.
Название: Массивы
Отправлено: NeoNox от 29 Сентября 2006, 13:45:29
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
Так и есть, это просто подсказка. Я не совсем понял что нужно игнорировать, нулевой элемент масива или элемент со значением ноль.
Название: Массивы
Отправлено: Green Kakadu от 29 Сентября 2006, 22:16:41
commander
Цитировать
commander:
while (1)
{
$el=$m[int rand (scalar @m)];
last unless ($el==0);
}
print $el;


охренеть ;) особенно для массива @a = (0,0,0,0);
Название: Массивы
Отправлено: NeoNox от 30 Сентября 2006, 15:56:21
Green Kakadu
Гы...
Название: Массивы
Отправлено: Yaroslav от 04 Октября 2006, 00:58:45
Error202
@ma = (1,0,2,0,3,0,4,0);
foreach (@ma) {
  if ($_ != 0) { push @new, "$_"; }
}
print "$new[rand @new]";
Название: Массивы
Отправлено: NeoNox от 04 Октября 2006, 12:57:16
print (grep { $_ != 0 } @ma)[ int rand scalar grep { $_ != 0 } @ma ];

Yaroslav
push @new, $_  if ($_ != 0);
лучше читается и короче пишется. Просто совет.