Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> выбор из массива элементов встречающихся один раз, на php или perl 
:(
    Опции темы
lelik133
  Дата 31.7.2004, 16:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Awaiting Authorisation
Сообщений: 517
Регистрация: 5.2.2003
Где: Москва

Репутация: 5
Всего: 14



Народ помогите, есть следующая задача имееться масиив большой более 75 тыс. элементов, в нем ест элементы которые встречаються один раз есть те которые дублированы несколько раз так вот надо на выходе полукчить два массива один с элементами встречающимися только один раз, а второй с теми котые входят в начальный масиив два раза и более. Как это реализовать на PHP или Perl пока четкого механизма не придумал.
PM ICQ   Вверх
nevermind
Дата 31.7.2004, 19:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 91
Регистрация: 15.5.2004

Репутация: нет
Всего: нет



Для этого тебе придется "прощупать" каждый элемент

Создаешь два массива
1 для дубликатов
2 не для дубликатов

Создаешь в исходном итератор, и сравниваешь элементы массива по очереди как только нашел дубликат, то копируй этот элемент в массив 1 и идешь дальше.
Если дубликата не нашлось то копируй в элемент массив 2.

Это сообщение отредактировал(а) nevermind - 31.7.2004, 19:38
PM   Вверх
lelik133
Дата 31.7.2004, 21:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Awaiting Authorisation
Сообщений: 517
Регистрация: 5.2.2003
Где: Москва

Репутация: 5
Всего: 14



да на этом комп просто повеситься прикинь каждый элемент сравнить с 75 тыс (придеться произвести 75000 в степени 75000 сравнений) нет должна быть стандартная функция которая покажет сколько раз каждый элемент входит в массив
PM ICQ   Вверх
Ignat
Дата 31.7.2004, 22:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Флудератор
****


Профиль
Группа: Экс. модератор
Сообщений: 4030
Регистрация: 19.4.2004
Где: غيليندزيك مدينة

Репутация: 10
Всего: 73



Что-то в мануале ничего не нашел. Есть идея склеить имплодом и прошерстить регами.


--------------------
Теперь при чем :P
PM   Вверх
RaZoR
Дата 31.7.2004, 22:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 97
Регистрация: 6.5.2004
Где: Оренбург

Репутация: нет
Всего: 1



щас... есть одна идея... скоро выложу наверное

Это сообщение отредактировал(а) RaZoR - 31.7.2004, 22:03
PM MAIL ICQ   Вверх
nevermind
Дата 31.7.2004, 22:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 91
Регистрация: 15.5.2004

Репутация: нет
Всего: нет



Цитата(lelik133 @ 31.7.2004, 20:22)
да на этом комп просто повеситься прикинь  каждый элемент сравнить с 75 тыс (придеться произвести 75000 в степени 75000 сравнений) нет должна быть стандартная функция которая покажет сколько раз каждый элемент входит в массив

Намного меньше на самом деле smile.gif

Ведь если мы уже сранили 1 элемент со 2, то нам совсем не обязательно сравнивать 2 с 1.
Делается просто, на какой позиции сейчас находится итератор, сравнение производится наченая не с 1 элемента, а последующей от итератора позиции

допустим мы имеем 10 элементов, то количество сравнений будет:

9+8+7+6+5+4+3+2+1=45 сравнений smile.gif

но не в коем случае не 10^10=10000000000 как ты написал
PM   Вверх
RaZoR
Дата 31.7.2004, 22:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 97
Регистрация: 6.5.2004
Где: Оренбург

Репутация: нет
Всего: 1



короче вот... написал кое-что... может быть можно лучше, но это первое, что пришло в голову.
$array - начальный массив
$new_array1, $new_array2 - два новых массива
Код
$array=array(345,32141,12,123,768,54,123,123,66,58,34,12,1243,124,124);
$new_array1=array_unique($array);
$new_array2=array();
sort($array);
sort($new_array1);
$size=sizeof($array);
$j=0;
for ($i=0;$i<$size;$i++)
{
if ($array[$i]===$new_array1[$j]) $j++;
else $new_array2[]=$array[$i];
}
$new_array2=array_unique($new_array2);
$new_array1=array_diff($new_array1,$new_array2);

а может я ваще вопрос не понял...

Это сообщение отредактировал(а) RaZoR - 31.7.2004, 22:27
PM MAIL ICQ   Вверх
Kefir
Дата 1.8.2004, 11:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


«Hakuna Matata»
***


Профиль
Группа: Комодератор
Сообщений: 1878
Регистрация: 25.1.2003
Где: Tampere, Suomi

Репутация: 13
Всего: 87



есть такая замечательная ф-ция в ПХП:
array_count_values
надеюсь, что поможет wink.gif
PM MAIL WWW Skype   Вверх
<Spawn>
Дата 1.8.2004, 13:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Око кары:)
****


Профиль
Группа: Экс. модератор
Сообщений: 2776
Регистрация: 29.1.2003
Где: Екатеринбург

Репутация: 1
Всего: 64



Если бы эти данные лежали в талбице базы данных то все было бы просто:

1)
Код
SELECT ArrayValue
  FROM ArrayTable
 GROUP BY ArrayValue
HAVING Count(ArrayValue) = 1


2)
Код
SELECT ArrayValue
  FROM ArrayTable
 GROUP BY ArrayValue
HAVING Count(ArrayValue) > 1


Это сообщение отредактировал(а) <Spawn> - 1.8.2004, 13:14


--------------------
"Для некоторых людей программирование является такой же внутренней потребностью, подобно тому, как коровы дают молоко, или писатели стремятся писать" - Николай Безруков.
PM MAIL ICQ   Вверх
Graf Zeppelin
Дата 1.8.2004, 13:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 130
Регистрация: 28.3.2004

Репутация: нет
Всего: 1



Вобще-то если бы была стандартная функция она тоже бы вешала копм smile.gif
--------------------
Jah, help me!
PM MAIL   Вверх
BioMaX
Дата 16.7.2009, 16:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 16
Регистрация: 3.7.2007

Репутация: нет
Всего: нет



Можно сделать иначе
$string = implode(",", $array);

А дальше пройтись строковой функцией на поиск дубликатов... либо меня глючит ))
PM MAIL   Вверх
Ипатьев
Дата 16.7.2009, 16:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2232
Регистрация: 5.7.2009

Репутация: 28
Всего: 37



BioMaX, учитывая, что за 5 (прописью: пять!) лет надобность в решении этого вопроса наверняка отпала, то да - глючит, и при том жестоко.
PM MAIL   Вверх
lelik133
Дата 16.7.2009, 16:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Awaiting Authorisation
Сообщений: 517
Регистрация: 5.2.2003
Где: Москва

Репутация: 5
Всего: 14



жесть. BioMaX как вы вообще эту тему откопали.
я уже и не помню для какого проекта мне такая хрень понадобилась. и что как то ее решил тогда это точно smile
эх.. сейчас бы решилось все за пять минут, таблица в бд и count 
PM ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0668 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.