Автор Тема: Чистка массива  (Прочитано 4332 раз)

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

Оффлайн Alniger

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 24
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Чистка массива
« : 24 Мая 2006, 11:26:14 »
Народ здрасьте.

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

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

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

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

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

Заранее Вам спасибо.
« Последнее редактирование: 24 Мая 2006, 11:41:11 от Alniger »

Оффлайн NeoNox

  • Координатор
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 3012
  • +0/-0
  • 0
    • Просмотр профиля
Чистка массива
« Ответ #1 : 24 Мая 2006, 11:43:02 »
array[3] не существует и так.
Для уборки пробелов
@array = grep {$_ ne " "} @array;
The documentations is your friend

Оффлайн arto

  • Ветеран
  • *****
  • Сообщений: 699
  • +0/-0
  • 2
    • Просмотр профиля
Чистка массива
« Ответ #2 : 24 Мая 2006, 11:43:40 »
perldoc -f grep

Оффлайн Alniger

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 24
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Чистка массива
« Ответ #3 : 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

  • Ветеран
  • *****
  • Сообщений: 699
  • +0/-0
  • 2
    • Просмотр профиля
Чистка массива
« Ответ #4 : 24 Мая 2006, 12:55:22 »
@array3 = map { $_*shift @array2 } @array1;

Оффлайн Alniger

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 24
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Чистка массива
« Ответ #5 : 24 Мая 2006, 12:56:59 »
Извините, не правильно написал в начале
Как можно произвести деление элементов:
вид таков:
@array3=("$array1[0]/$array2[0]","$array1[1]/$array2[1]","$array1[2]/$array2[2]").

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

Оффлайн Alniger

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 24
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Чистка массива
« Ответ #6 : 24 Мая 2006, 13:57:17 »
Спасибо огромное.

$sum = eval(join("+",@array3));

Оффлайн arto

  • Ветеран
  • *****
  • Сообщений: 699
  • +0/-0
  • 2
    • Просмотр профиля
Чистка массива
« Ответ #7 : 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)
#

 

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