· Начало · Отвђтить · Статистика · Поиск · FAQ · Правила · Установки · Язык · Выход · WASM.RU · Noir.Ru ·

 WASM Phorum —› WASM.ZEN —› Очистка массива от избыточных элементов

. 1 . 2 . >>

Посл.отвђт Сообщенiе


Дата: Июл 28, 2003 19:31:58

Народ. Вопрос. Имеем массив в Перле, нечто вроде @array :) Массив содержит ряд чисел. Где-то так:
1,3,5,5,5,3,1,5,5,5,5,3,3,7,9,10 и т.п.
Вопрос - как мне убрать всю избыточность? Т.е. оставить только:
1,3,5,7,9,10

Сортировка рояли не играет. Могу и отсортировать перед удалением :)

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


Дата: Июл 28, 2003 22:12:06

Пока от вас дождешься...
Я, вроде, сделал. Я уж не знаю, насколько оно криво вышло, но, кажись, работает.
my $i=0;
while(defined $taxon[$i])
{
	my $n = $i + 1;
	while (defined $taxon[$n])
	{
		if ($taxon[$i] == $taxon[$n])
		{
			splice(@taxon, $n, 1);
			$n--;
		}
		$n++;
	}
	$i++;
}




Дата: Июл 28, 2003 22:20:05

Пока от вас дождешься...
Какой нетерпеливый, однако! :)

Мне не очень нравится $n-- и потом $n++. Мож лучше так:
if ($taxon[$i] == $taxon[$n])
 { splice(@taxon, $n, 1); }
 else { $n++; }


Дата: Июл 28, 2003 22:41:50 · Поправил: volodya

Да, ты прав. Это изящнее. Ща буду гонять...
Погонял. Нравится :)


Дата: Июл 29, 2003 12:03:17 · Поправил: bsl_zcs

%z = map { $_=>0 } @taxon;
@taxon = keys %z;


Дата: Июл 29, 2003 12:12:57

volodya
ЭЭЭэээххх :)))
Вот дурацкие массивы эти Перла :)))


ЩАЗ придумаю тебе вариант с сортировкой!!!


Дата: Июл 29, 2003 12:40:05

volodya
ааааааааааааааааааааааа
Меня пробило!!!!!!!!!!!!!!!
03

Кроче массив отсортирован.....
Не сбивайте,
и сам собъюсь... :)
Всё это можно сделать и на Perl (я проверил), но пример на PHP...
$n = size($array);

// Ну надо же было что-то засунуть?
// Вообще эту строчку можно убрать, чувствую что да..
// Но так я всё перепутаю...
$save = $array[$n];

foreach($i=0;$i>$n;$i++)
{
//БАНЗАЙ!!!
//Типа берём элемент и вытаскиваем его из массива
// Эта функция должна быть в Perl
$value = shift($array); 
// Одна строчка... :)))
if($save != $value)
      {
       push($array,$value);
       $save = $value;
      }
}


Господи, А как ыб это на асме выглядело!!!
Единственный минус.. Массив нужно отсортировать :(((


Дата: Июл 29, 2003 12:43:22

volodya
Да и ещё по идеее, если Перл это как нужно слобает этот метод будет хорошо для тех случаев, когда мы имеем длинные последовательности одинаковых элементов...
Иначе..


Дата: Июл 29, 2003 13:38:50

Если бы это был PHP можно было одной функцией дело решить :)
array_unique


Дата: Июл 29, 2003 13:41:17

Eddy
Я знаю..


Дата: Июл 29, 2003 16:44:52

> Если бы это был PHP можно было одной функцией дело решить :)
Господа, извините что вмешиваюсь, :) но bsl_zcs уже привел вам весьма эффективное в духе перла решение поставленной задачи. Причем решение длиной в две строчки..
Смысл в том чтобы засунуть этот массив в виде ключей в хэш - в результате чего одинаковые элементы самоуничтожатся. А дальше просто получить список оставшихся уникальных ключей.


Дата: Июл 29, 2003 19:14:35

bsl_zcs

Супер! Просто супер.


Дата: Июл 29, 2003 19:18:20

2Sten: ;)


Дата: Июл 30, 2003 01:10:05

bsl_zcs

А ты пару статей по алгоритмам для васма написать не хочешь?


Дата: Июл 30, 2003 19:37:38 · Поправил: Безпощадный даос

volodya
Вот думаю, быть или не быть? :)

. 1 . 2 . >>


Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.096