Автор Тема: random из массива  (Прочитано 3367 раз)

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

Оффлайн AnnA

  • Фанатка форума
  • Старожил
  • ****
  • Сообщений: 263
  • +0/-0
  • 2
    • Просмотр профиля
    • http://
random из массива
« : 03 Декабря 2004, 19:37:37 »
Всем приветик!

есть некий массив @mass
при наличии некой переменной $val создаем массив @arr из имеющегося @mass:
if ($val) { @arr grep { (split /\\x01/)[5] =~ /$val/} @mass; }

а теперь собственно рандомом вытаскиваем строку:

my ($id,$var1,$var2,$var3,$var4,$var5,$var6)=split /\\x01/, $mass[int rand(@mass)];

и вот какой вопрос:

какие есть пути решения оперативненько подставлять имя массива здесь: $mass[int rand(@mass)];

я решила так:my ($id,$var1,$var2,$var3,$var4,$var5,$var6) =
scalar(@arr)>2?split /\\x01/, $arr[int rand(@arr)]:split /\\x01/, $mass[int rand(@mass)];


но мне кажется, что это можно сделать как-то еще проще и вот интересно - как. ;)
пока-пока. :)

Оффлайн AnnA

  • Фанатка форума
  • Старожил
  • ****
  • Сообщений: 263
  • +0/-0
  • 2
    • Просмотр профиля
    • http://
random из массива
« Ответ #1 : 03 Декабря 2004, 19:41:10 »
там есть экранирующий слэш перед х01 порсто чего-то форум его не показал. :)
ух тышка!! ;) подпись появилась! ;)
пока-пока. :)

Оффлайн AnnA

  • Фанатка форума
  • Старожил
  • ****
  • Сообщений: 263
  • +0/-0
  • 2
    • Просмотр профиля
    • http://
random из массива
« Ответ #2 : 03 Декабря 2004, 20:41:45 »
чиво? глупость что ль  опять спросила?
ну хорошо. тогда еще вопрос.
@mass этот - он огромный! 45Мб!..
.....
;) шутка. не 45 конечно. но все равно большой.
можно ли как-то, не втягивая весь в файл массив, "дёрнуть" случайную строчку? Нет? наверное нельзя, да?
Ну ладно. Всем хороших выходных.
пока-пока. :)

Оффлайн arto

  • Ветеран
  • *****
  • Сообщений: 699
  • +0/-0
  • 2
    • Просмотр профиля
random из массива
« Ответ #3 : 03 Декабря 2004, 23:07:22 »
perldoc -q "How do I select a random line from a file?"

а что за задача-то такая ужасная?

Оффлайн Phoinix

  • RW
  • Ветеран
  • *****
  • Сообщений: 1097
  • +0/-0
  • 2
    • Просмотр профиля
    • http://phoinix.ucoz.ru
random из массива
« Ответ #4 : 04 Декабря 2004, 13:31:12 »
AnnA

Цитировать
можно ли как-то, не втягивая весь в файл массив, "дёрнуть" случайную строчку? Нет? наверное нельзя, да?


AFAIK примерно так:

#!/usr/bin/perl

use strict;

my $rand int(rand([Число строк в файле]) + 1);
my $line;
my $i 1;
open (FILE, \'./text.txt\');
while (<FILE>) {
    if ($i > $rand) {goto CLOSE_FILE}
    $line = $_;
    $i++;
}
CLOSE_FILE:
close FILE;

print $line;


Единственно, конечно желательно знать количество строк в файле...

Оффлайн AnnA

  • Фанатка форума
  • Старожил
  • ****
  • Сообщений: 263
  • +0/-0
  • 2
    • Просмотр профиля
    • http://
random из массива
« Ответ #5 : 08 Декабря 2004, 16:41:40 »
извините. только сегодня вот смогла ответить. :)
спасибы. ;)
Phoinix вот у меня пирмерно такой же вариант появился, но только я сначала делала рандом из массива, предварительно созданного: @mass=(0..$кол-во записей в массиве);
т.е.  Вы правы:
Цитировать
Phoinix:
желательно знать количество строк в файле

а это как-то... не очень красиво. ;)
Цитировать
arto:
perldoc -q "How do I select a random line from a file?"

Здоровско! :) И почему я сама не додумалась в FAQ заглянуть?
Вы, наверное наизусть его знаете, да? ;)
Цитировать
arto:
а что за задача-то такая ужасная?

ну ладно Вам глумиться... :) Задача такая и была: либо из одного массива брать произвольную строчку данных, либо, если наличествует образец поиска, - сделать выборку из первого массива по этому образцу. и теперь уже из этой выборки  взять произвольную строчку данных. Запутано, да, написала? :)
В любом случае - спасибо Вам еще раз за то что ткнули меня носиком в нужное место. :)
пока-пока. :)

 

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