Автор Тема: Массивы  (Прочитано 5548 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Error202

  • Бесстрашный
  • Ветеран
  • *****
  • Сообщений: 540
  • +1/-0
  • 2
    • Просмотр профиля
    • http://www.tender-plus.ru
Массивы
« : 28 Сентября 2006, 11:50:00 »
Как можно выбрать случайны эл-т массива, чтобы он был не равный 0?

И можно ли как-нть стандартно удалить какой-нть эл-т массива по его индексу?
« Последнее редактирование: 28 Сентября 2006, 12:34:28 от Error202 »
Космическая игрушка

Оффлайн Error202

  • Бесстрашный
  • Ветеран
  • *****
  • Сообщений: 540
  • +1/-0
  • 2
    • Просмотр профиля
    • http://www.tender-plus.ru
Массивы
« Ответ #1 : 28 Сентября 2006, 12:43:00 »
Как удалить я вспомнил...
Космическая игрушка

Оффлайн NeoNox

  • Координатор
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 3012
  • +0/-0
  • 0
    • Просмотр профиля
Массивы
« Ответ #2 : 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
The documentations is your friend

Оффлайн commander

  • Developer
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 1298
  • +0/-0
  • 2
    • Просмотр профиля
    • http://www.webtips.ru
Массивы
« Ответ #3 : 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;
And no religion too...

Оффлайн KiLLjoY aka SerZH

  • Завсегдатай
  • Новичок
  • *
  • Сообщений: 45
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Массивы
« Ответ #4 : 29 Сентября 2006, 12:55:46 »
Удалить элемент из массива нельзя, его можно только сделать неопределенным. Или перестроить весь массив.

Оффлайн NeoNox

  • Координатор
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 3012
  • +0/-0
  • 0
    • Просмотр профиля
Массивы
« Ответ #5 : 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
Так и есть, это просто подсказка. Я не совсем понял что нужно игнорировать, нулевой элемент масива или элемент со значением ноль.
The documentations is your friend

Оффлайн Green Kakadu

  • Координатор
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 2757
  • +1/-0
  • 0
    • Просмотр профиля
    • http://gnezdo.webscript.ru
Массивы
« Ответ #6 : 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

  • Координатор
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 3012
  • +0/-0
  • 0
    • Просмотр профиля
Массивы
« Ответ #7 : 30 Сентября 2006, 15:56:21 »
Green Kakadu
Гы...
The documentations is your friend

Оффлайн Yaroslav

  • Фанат форума
  • Старожил
  • ****
  • Сообщений: 323
  • +0/-0
  • 0
    • Просмотр профиля
Массивы
« Ответ #8 : 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

  • Координатор
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 3012
  • +0/-0
  • 0
    • Просмотр профиля
Массивы
« Ответ #9 : 04 Октября 2006, 12:57:16 »
print (grep { $_ != 0 } @ma)[ int rand scalar grep { $_ != 0 } @ma ];

Yaroslav
push @new, $_  if ($_ != 0);
лучше читается и короче пишется. Просто совет.
« Последнее редактирование: 04 Октября 2006, 13:07:58 от NeoNox »
The documentations is your friend

 

Sitemap 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28