Эффективная базовая рекурсия данных - PullRequest
0 голосов
/ 16 августа 2011

Context

У меня есть объект Core Data, который называется «LPFile» и представляет файл на диске.Он имеет необязательное отношение к себе, которое позволяет файлам «импортировать» друг друга, например так:

import << ---- >> importBy

Вопрос

Сейчас, предположим, у меня такая ситуация с файлами 1, 2, 3 и 4:

Файл 1 импортируется по 2 и 3. Файлы 2 и 3 импортируются по 4. Что я хочу знать: если я начну сфайл 1, каков наиболее эффективный эффективный подход для поиска «базового» или «конечного» файла этой взаимосвязи (в данном случае это файл 4)?Я могу написать простую рекурсивную функцию, которая просматривает каждую сущность во взаимосвязи importBy и следует по цепочке, пока не найдет сущность с нулевыми сущностями в взаимосвязи importBy, но я хотела посмотреть, есть ли в Core Data предварительно запеченный метод для выполненияэто.

Спасибо!

Ответы [ 2 ]

1 голос
/ 17 августа 2011

Core Data не имеет предварительно запеченного метода для поиска рута. Таким образом, ваш способ проходить через это хорошо.

0 голосов
/ 17 августа 2011

Несмотря на то, что на эти вопросы был дан ответ, я решил аналогичную проблему для дерева, созданного теми же сущностями, добавив атрибут с большой фантазией «хлебная крошка» и заполнив его во время выполнения, чтобы при наличии модели сущности

X {
 name NSString
 breadcrumb NSString
 to-many X relationship
}

A, B, C, D, E, как это:

A-->B
 -->C-->D
 -->E

Я в конечном итоге с этим:

A {
 breadcrumb /A 
 relationship B,C,E
}


B {
 breadcrumb /A/B
 relationship nil
}     

C {
 breadcrumb /A/C
 relationship D
} 

D {
 breadcrumb /A/C/D
 relationship nil
} 

E {
 breadcrumb /A/D
 relationship nil
} 

Я могу сказать, что индексирование хлебных крошек, сделать вещи быстрее, и я могу сделать поиск регулярных выражений.Важно, что когда у меня есть сущность, я легко могу найти ее корень без циклов.Конечно, у меня был какой-то механизм, позволяющий избежать зацикливания и уникальности хлебных крошек, основанный на атрибуте name.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...