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

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

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

Регистрация: Dec 2009
Сообщений: 428
По умолчанию маcсив-дерево

Уважаемые программисты!
Прошу совета в реализации алгоритма, из за которого уже голова кругом идет )

Имеется массив вида
Код AS3:
[
    {'id':1, 'parent_id':0, 'title':'...'},
    {'id':2, 'parent_id':1, 'title':'...'},
    {'id':3, 'parent_id':2, 'title':'...'},
    {'id':4, 'parent_id':1, 'title':'...'},   
    {'id':5, 'parent_id':0, 'title':'...'},
    {'id':6, 'parent_id':5, 'title':'...'},
    {'id':7, 'parent_id':6, 'title':'...'},
    {'id':8, 'parent_id':7, 'title':'...'},
    {'id':9, 'parent_id':0, 'title':'...'}
]
Надо проделать на массивом некую операцию, что бы на выходе получить
Код AS3:
[
    {
      'id':1, 
      'parent_id':0, 
      'title':'...',
      sub : [
          {
             'id':2, 
             'parent_id':1, 
             'title':'...',
             sub : [
                 {'id':3, 'parent_id':2, 'title':'...'}
             ]
          },
          {'id':4, 'parent_id':1, 'title':'...'}
      ]
     },
     {
          'id':5, 
          'parent_id':0, 
          'title':'...',
          sub: [
             {
               'id':6, 
               'parent_id':5, 
               'title':'...',
               sub: [
                   {
                       'id':7, 
                       'parent_id':6, 
                       'title':'...',
                        sub: [
                             {
                                 'id':8, 
                                 'parent_id':7, 
                                 'title':'...'
                              }
                        ]    
                   }
               ]
            }
          ]
      },
      {'id':9, 'parent_id':0, 'title':'...'}
]
Ну то есть есть корневые элементы, у них могут быть дети, у детей дети и т.п. до бесконечности, и все это должно быть в массиве (именно в массиве, к сожалению) в соответствии с иерархией родителей-детей (у каждого ребенка только один родитель).

Я делал рекурсивно, но замкнулся на том, что не знаю как вложить массив в массив рекурсивно таким образом )
Производительность роли не играет, как и язык программирования, подойдут и несколько шаговые решения (например собирать в XML-строку которую потом переводить в массив). Нужен просто алгоритм, или статьи на эту тему, или может быть кто то решал уже подобную задачу? Может быть каким то образом оптимизировать исходный массив (данные лежат в базе в примерно таком виде), или на уровне SQL-запроса такое решить можно? Буду рад любому совету!
__________________
Скажи мне кто твой друг и я скажу тебе кто твой друг

Старый 25.12.2010, 13:21
dark256 вне форума Посмотреть профиль Отправить личное сообщение для dark256 Посетить домашнюю страницу dark256 Найти все сообщения от dark256
  № 2  
Ответить с цитированием
dark256
 
Аватар для dark256

блогер
Регистрация: Apr 2008
Адрес: SPb
Сообщений: 3,718
Записей в блоге: 5
Отправить сообщение для dark256 с помощью ICQ Отправить сообщение для dark256 с помощью Skype™
Объявляем массив PARENT_IDS
Линейно перебираем в цикле по i ваши строки или, допустим объекты obj.

Пишем

PARENT_IDS[ obj [i].parent_id ] += obj [i].id+","

На выходе получаем массив ссылок:

PARENT_IDS[ 0 ] = "1,5,7,9"
PARENT_IDS[ 1 ] = "2,5"

Далее по полученным данным в двух циклах строим ваше дерево. В общих чертах. Похоже?
__________________
FLASHER.MAP SOUNDSTAGE / CS3 / AS2

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

Регистрация: Dec 2009
Сообщений: 428
Весьма! ) Спасибо!
__________________
Скажи мне кто твой друг и я скажу тебе кто твой друг

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

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

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


 


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


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