2009-11-07 5 views
-1

Пример Сценарий: обратите внимание, что это может быть как глубокое, так и мелкое в зависимости от веб-сайта. Spider просматривает первую страницу ссылок. он сохраняет его как array1.Рекурсивные вложенные петли

Паук входит в первую ссылку, теперь она находится на второй странице. он видит ссылки и сохраняет его как array2.

Паук входит в первую ссылку на второй странице, ее теперь на третьей странице. он видит ссылки и хранит его как массив 3.

Обратите внимание, что это общий сценарий. Я хочу подчеркнуть необходимость делать много циклов в циклах.

rootArray [array1, array2, array3 ....]

, как я могу сделать рекурсивные вложенные циклы? array2 - это дети каждого VALUE массива 1 (мы предполагаем, что структура очень однородна, каждый VALUE массива 1 имеет похожие ссылки в массиве2). Массив 3 - это дети каждого значения массива2. и так далее.

ответ

1

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

Вы также захотите проверить наличие дубликатов ссылок при добавлении новой ссылки на список/дерево/все, что у вас уже есть. В противном случае петли вроде page_1 -> page_2 -> page_1 ... разорвут ваше приложение.

Ваша главная цель здесь? Странички страниц - это не совсем новая технология.

2
module Scratch 
    def self.recur(arr, depth, &fn) 
    arr.each do |a| 
     a.is_a?(Array) ? recur(a, depth+1, &fn) : fn.call(a, depth) 
    end 
    end 
    arr = [[1, 2, 3], 4, 5, [6, 7, [8, 9]]] 
    recur(arr, 0) { |x,d| puts "#{d}: #{x}" } 
end 
+0

Мне это нравится, потому что я даже не мог определить язык вначале. Вернемся к детскому саду. –

1

Все зависит от того, что вы пытаетесь сделать.

Если вы собираете ссылки, то хэш или набор будут работать хорошо. Массив может использоваться также, но может привести к некоторым ошибкам.

Если вам нужно показать структуру сайта, вам понадобится дерево или массивы массивов, а также некоторый способ отметить, какие URL-адреса вы посетили.

В любом случае вам необходимо избегать избыточных ссылок, чтобы не попасть в петлю. Также очень часто можно указать какое-то ограничение на то, насколько глубоко вы спуститесь, и будете ли вы помнить и/или следовать ссылкам за пределами сайта.