Forum Webscript.Ru

Программирование => Perl => Тема начата: Alniger от 24 Мая 2006, 11:26:14

Название: Чистка массива
Отправлено: Alniger от 24 Мая 2006, 11:26:14
Народ здрасьте.

Не могу сообразить как чистить массив от лишнего

Массив:
@array=("1","2","temp",""," ","6");

после очистки
@array=("1","2","temp","6");

Т.е. нужно удалить пустые элементы (пример array[3]) и элементы содержащие пробел (пример array[4]), и собрать его.

А возможно ли узнать, номер элемента содержащий слово temp, т.к. его положений в массиве может быть где угодно.

Заранее Вам спасибо.
Название: Чистка массива
Отправлено: NeoNox от 24 Мая 2006, 11:43:02
array[3] не существует и так.
Для уборки пробелов
@array = grep {$_ ne " "} @array;
Название: Чистка массива
Отправлено: arto от 24 Мая 2006, 11:43:40
perldoc -f grep
Название: Чистка массива
Отправлено: Alniger от 24 Мая 2006, 12:52:59
Подскажите, есть 2 массива:
@array1=("2","3","5");
@array2=("1","5","1");    
Количество элементов может быть разным, но одинаковыми по количеству в них.

Как можно произвести деление элементов:
вид таков:
 @array3=("$array1[0]/$array2[0]","$array1[1]/$array2[1]","$array1[2]/$array2[2]").

и затем вывести сумму элементов в массиве
@array4 = (сумма@array3)

Заранее спасибо
Название: Чистка массива
Отправлено: arto от 24 Мая 2006, 12:55:22
@array3 = map { $_*shift @array2 } @array1;
Название: Чистка массива
Отправлено: Alniger от 24 Мая 2006, 12:56:59
Извините, не правильно написал в начале
Как можно произвести деление элементов:
вид таков:
@array3=("$array1[0]/$array2[0]","$array1[1]/$array2[1]","$array1[2]/$array2[2]").

и затем вывести сумму элементов в массиве
@array4 = (сумма@array3)
Название: Чистка массива
Отправлено: Alniger от 24 Мая 2006, 13:57:17
Спасибо огромное.

$sum = eval(join("+",@array3));
Название: Чистка массива
Отправлено: arto от 24 Мая 2006, 14:13:43
# perl -MBenchmark
@q = map { int rand 256 } 0..255;
timethese (100_000,{ A => sub { my $sum = 0; return (map { $sum+=$_ } @q)[-1]; },B => sub { return eval (join "+",@q); } } );

Benchmark: timing 100000 iterations of A, B...
         A:  8 wallclock secs ( 7.60 usr +  0.00 sys =  7.60 CPU) @ 13157.89/s (n=100000)
         B: 40 wallclock secs (39.34 usr +  0.03 sys = 39.37 CPU) @ 2540.01/s (n=100000)
#