Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Поиск рулит! Сообщения за день Все разделы прочитаны
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 05.10.2013, 21:17
scnippers вне форума Посмотреть профиль Отправить личное сообщение для scnippers Найти все сообщения от scnippers
  № 1  
Ответить с цитированием
scnippers
 
Аватар для scnippers

Регистрация: Jul 2013
Сообщений: 21
По умолчанию Сколько раз элемент повторяется в массиве.

Всем привет. У меня есть массив в котором лежат id из вконтакта вообщем это не важно. Важно то что в массиве есть повторяющиеся id нужно узнать сколько раз повторяется id в массиве я делаю так
Код AS3:
for(var k:Number=0;k<allIdFriends.length;k++)
			{
				topStar.push(0); // массив в котором находятся сколько раз повторялся id
			}
			for(var i:Number = 0;i<allIdFriends.length;i++)
			{
				for(var j:Number = 0;j<allIdFriends.length;j++)
				{
 
						if(allIdFriends[i]==allIdFriends[j])
						{
							topStar[i] = topStar[i]+1;
							allIdFriends.splice(j,1);
						}
 
				}
			}
но почему то проскакивают одинаковые id. Подскажите плз как доработать код.

Старый 05.10.2013, 23:35
Elff вне форума Посмотреть профиль Отправить личное сообщение для Elff Найти все сообщения от Elff
  № 2  
Ответить с цитированием
Elff

Регистрация: Nov 2009
Адрес: 59°57′ с. ш. 30°19′ в. д.
Сообщений: 17
Код AS3:
var idArray:Array = [065161555,06599789,56481100,56899200,48889884,06599789,849944441,06599789,065161555];
var idCountersArray:Array = [];
 
var i:int = idArray.length;
while (i--) idCountersArray.push(0);
 
for (var j:int = 0; j<idArray.length; j++) {
	for (var q:int = idArray.length-1; q>j; q--) {
		if (idArray[j] == idArray[q]) {
			idCountersArray[j]++;
			idArray.splice(q, 1);
			idCountersArray.splice(q, 1);
		}
	}
}
 
trace(idArray);
trace(idCountersArray);

Старый 06.10.2013, 00:12
Wolsh вне форума Посмотреть профиль Отправить личное сообщение для Wolsh Найти все сообщения от Wolsh
  № 3  
Ответить с цитированием
Wolsh
Нуб нубам
 
Аватар для Wolsh

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
После удаления элемента с индексом j элемент, который был за ним (j + 1) становится элементом с индексом j. А цикл переходит на следующую итерацию j + 1. Таким образом элемент и проскакивает — когда два или больше одинаковых id оказываются рядом. Нужно после каждого сплайса возвращать итератор на единицу назад, то есть делать j--.
Рассмотрите так же, что происходит с итератором цикла i.
И Вас не пугает, что в какой-то из проверок Вы уничтожите сам образец (i==j) и замените его следующим элементом?
__________________
Reality.getBounds(this);

Старый 06.10.2013, 13:36
scnippers вне форума Посмотреть профиль Отправить личное сообщение для scnippers Найти все сообщения от scnippers
  № 4  
Ответить с цитированием
scnippers
 
Аватар для scnippers

Регистрация: Jul 2013
Сообщений: 21
Цитата:
Сообщение от Wolsh Посмотреть сообщение
После удаления элемента с индексом j элемент, который был за ним (j + 1) становится элементом с индексом j. А цикл переходит на следующую итерацию j + 1. Таким образом элемент и проскакивает — когда два или больше одинаковых id оказываются рядом. Нужно после каждого сплайса возвращать итератор на единицу назад, то есть делать j--.
Рассмотрите так же, что происходит с итератором цикла i.
И Вас не пугает, что в какой-то из проверок Вы уничтожите сам образец (i==j) и замените его следующим элементом?
применил ваш совет. Теперь одинаковых нет, но почему то в самом начале появляется длинный id которого не существует в изначальном массиве его нет.
вот так я их вывожу: id - сколько раз повторяется
вот часть
29196347101 - 5 - что за id такой откуда он взялся??
198420044 - 0 - и почему здесь нули??
100192424 - 74
196992613 - 9
101949783 - 79
217388209 - 0
34807332 - 1
178105535 - 1

Старый 06.10.2013, 14:24
Wolsh вне форума Посмотреть профиль Отправить личное сообщение для Wolsh Найти все сообщения от Wolsh
  № 5  
Ответить с цитированием
Wolsh
Нуб нубам
 
Аватар для Wolsh

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
Технически я конечно могу переслать Ваши вопросы в "Битву экстрасенсов", но, думаю, будет лучше, если Вы сами им напишите?
А мы тут обсуждаем ActionScript 3.0.
Не вижу в Вашем сообщении предмета для обсуждения. Где код?
__________________
Reality.getBounds(this);

Старый 06.10.2013, 15:19
mikhailk вне форума Посмотреть профиль Отправить личное сообщение для mikhailk Найти все сообщения от mikhailk
  № 6  
Ответить с цитированием
mikhailk
 
Аватар для mikhailk

Регистрация: Nov 2009
Адрес: СПб
Сообщений: 2,236
Цитата:
Важно то что в массиве есть повторяющиеся id нужно узнать сколько раз повторяется id
Только тупой и очевидный код работает надежно и предсказуемо

Код AS3:
 
var ids:Array = [ 1,2,3,4,3,3,2,2,1 ];
var idCounts:Array = new Array();
 
for (var i:int=0;i<ids.length;i++) 
{
  var key:String = String(ids[i]);
  if (idCounts[key]) idCounts[key]++;
  else idCounts[key] = 1;
}
 
for (key in idCounts)
{
  trace(key,":",idCounts[key]);
}

Создать новую тему Ответ Часовой пояс GMT +4, время: 05:47.
Быстрый переход
  « Предыдущая тема | Следующая тема »  
Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


Часовой пояс GMT +4, время: 05:47.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.