Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Вопрос по рекурсии, как вернуть значение! 
:(
    Опции темы
Wanderer2019
Дата 19.11.2005, 16:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Привет!
У меня есть класс который обхдит определенную дерикторию со всеми ее файлами и папками. Т.О. нечто вроде привычного Tree написанного для собственных нужд.
теперь в этом моем tree мне нужно найти файл или папку. Для этого я пишу функцию основанную на рекурсии:
Код

public string FindItem(string SearchItem)
        {
            if(Path.GetFileName(FolderName)==SearchItem)
            {
                return Path.GetDirectoryName(FolderName);
            }
            for(int i=0;i<items.Count;i++)
            {
                if(items[i].ToString()==SearchItem)
                {
                    return FolderName;
                }
                if(items[i].GetType()==GetType())
                {
                    myTree nextTree=(myTree)items[i];
                    nextTree.FindItem(SearchItem);
                }
            }
            return FolderName;
        }

проюлема в том, что мне не вернуть значение. После того как значение найдено и отработал return, функция продолжает поиск по другим каталогам =(
как просто вернуть найденное значение????
PM ICQ MSN   Вверх
mr.DUDA
Дата 19.11.2005, 18:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


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

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



Код не компилится... ну да ладно. В общем, при рекурсивном поиске можно сделать так: метод производит сравнение с элементом дерева на текущем уровне, и если сравнение удачное - возвращает найденное значение. Если неудачное - вызывает сам себя рекурсивно для каждого вложенного элемента дерева, причём если результат любого такого вызова был не null, то метод прекращает перебор вложенных элементов и возвращает результат, полученный от вложенного элемента. Если после перебора всех элементов ничего не было найдено, метод возвращает null. Вот пример кода, объясняющего принцип рекурсивного поиска:

Код

object SearchRecursive (object whatToSearch, TreeItem treeItemFrom)
{
   if (treeItemFrom.Value == whatToSearch)
       return treeItemFrom;
   foreach (TreeItem childItem in treeItemFrom.Children)
   {
       object resultFromChild = SearchRecursive (whatToSearch, childItem);
       if(resultFromChild != null) return resultFromChild;
   }
   return null;
}


Результатом такого поиска будет либо объект TreeItem, у которого св-во Value равно whatToSearch, либо null если ничего не найдено.


--------------------
user posted image
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

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


 




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


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

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