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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Вложенный Dictionary 
V
    Опции темы
akzi
Дата 9.3.2009, 19:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 9.3.2009

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



Как можно создать вложенный Dictionary(да и вообще любой класс из дженеривок являющийся элементов самого себя)?

приблизительно так

Код

Dictionary<string, Dictionary> dict = new Dictionary<string, Dictionary>();
dict["key1"] = new Dictionary<string, Dictionary >();


PM MAIL   Вверх
Partizan
Дата 9.3.2009, 19:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Let's do some .NET
****


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

Репутация: 8
Всего: 67



akzi, 


Код

Dictionary <string, Dictionary<string, List<string>>>


Красота  smile 


--------------------
СУВ,
       Partizan.
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
akzi
Дата 9.3.2009, 20:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 9.3.2009

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



Цитата(Partizan @ 9.3.2009,  19:57)
Код

Dictionary <string, Dictionary<string, List<string>>>


Красота  smile

Это не совсем то. Я не знаю заранее уровень вложенности хешей. Как можно еще?
PM MAIL   Вверх
Partizan
Дата 9.3.2009, 21:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Let's do some .NET
****


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

Репутация: 8
Всего: 67



akzi, тогда ждут танцы с кастами...


--------------------
СУВ,
       Partizan.
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
akzi
Дата 9.3.2009, 21:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 9.3.2009

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



Вот додумался до еще большей красоты 

Код

Dictionary<string, Object> dict = new Dictionary<string, Object>();
dict["key1"] = new Dictionary<string, Object>();
((Dictionary<string, Object>)dict["key1"]).Add("key2",200);


Обращение просто ужасно. Можно как то тоже самое но проще(без приведения типов)?
PM MAIL   Вверх
Partizan
Дата 9.3.2009, 21:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Let's do some .NET
****


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

Репутация: 8
Всего: 67



akzi, ну вот это те самые танцы с кастами )


--------------------
СУВ,
       Partizan.
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
-Mikle-
Дата 9.3.2009, 22:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Невидимка Vingrad'а
***


Профиль
Группа: Экс. модератор
Сообщений: 1672
Регистрация: 22.6.2003
Где: Казахстан, Астана

Репутация: 4
Всего: 59



Цитата(akzi @  10.3.2009,  00:01 Найти цитируемый пост)
Dictionary<string, Object> dict = new Dictionary<string, Object>();
dict["key1"] = new Dictionary<string, Object>();
((Dictionary<string, Object>)dict["key1"]).Add("key2",200);


Видимо ты древовидную структуру делаешь (очень похоже)...
Dictionary, на мой взгляд, не лучшее решение
Обычный подход использовать связку Key, ParentKey, Value

Код

struct TreeItem
{
    int Key;
    int ParentKey;
    object value;
}

List<TreeItem> treeList;


ну или так:
Код

struct TreeItem
{
    int ParentKey;
    object value;
}

Dictionary<int, TreeItem> treeList;


Может задачу опишите? Вдруг решение в другой стороне лежит



--------------------
Если тебе плюют в спину, значит ты впереди...
PM   Вверх
Partizan
Дата 9.3.2009, 23:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Let's do some .NET
****


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

Репутация: 8
Всего: 67



-Mikle-, ну вообще как правило для древовидного типа коллекций объект типа TreeItem содержит обычно коллекцию дочерних элементов ;)


--------------------
СУВ,
       Partizan.
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
-Mikle-
Дата 9.3.2009, 23:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Невидимка Vingrad'а
***


Профиль
Группа: Экс. модератор
Сообщений: 1672
Регистрация: 22.6.2003
Где: Казахстан, Астана

Репутация: 4
Всего: 59



Partizan, да, верно... это я со способом хранения в двухмерном виде перепутал...

тогда так:

Код

    public class TreeItem
    {
        public Dictionary<int, TreeItem> Children = new Dictionary<int, TreeItem>();
    }

    TreeItem root = new TreeItem();
    root.Children.Add(1, new TreeItem());
    root.Children.Add(2, new TreeItem());
    root.Children[1].Children.Add(3, new TreeItem());
    TreeItem read = root.Children[1].Children[3];


Так сойдет? 


--------------------
Если тебе плюют в спину, значит ты впереди...
PM   Вверх
Partizan
Дата 9.3.2009, 23:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Let's do some .NET
****


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

Репутация: 8
Всего: 67



Цитата

Так сойдет?  


Зависит от того что конкретно автору надо smile


--------------------
СУВ,
       Partizan.
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
akzi
Дата 10.3.2009, 00:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 9.3.2009

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



[QUOTE=-Mikle-,9.3.2009,  22:55]
Цитата(akzi @  10.3.2009,  00:01 Найти цитируемый пост)

Может задачу опишите? Вдруг решение в другой стороне лежит

Мне надо обойти сайт, т.е пройти по всем его ссылкам(внутреним). Думал хранить в виде хеша(т.к. надо хранить информацию о самой странице), где ключ это ссылка и делать вложенность хешей для хранения структуры самого сайта. 
Пример с TreeItem очень даже как подойдет, им и воспользуюсь. Спасибо.
PM MAIL   Вверх
-Mikle-
Дата 10.3.2009, 00:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Невидимка Vingrad'а
***


Профиль
Группа: Экс. модератор
Сообщений: 1672
Регистрация: 22.6.2003
Где: Казахстан, Астана

Репутация: 4
Всего: 59



Нет. Даже так еще проще:

Код

    public class TreeItem : Dictionary<int, TreeItem> { }

    TreeItem root = new TreeItem();
    root.Add(1, new TreeItem());
    root[1].Add(2, new TreeItem());
    TreeItem item = root[1][2];


Добавлено через 2 минуты и 16 секунд
У нас тут уже 3 ночи... хорошие мысли с опозданием приходят уже...


--------------------
Если тебе плюют в спину, значит ты впереди...
PM   Вверх
akzi
Дата 10.3.2009, 00:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 9.3.2009

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



Всем спасибо, проблема решена.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
Partizan
PashaPash

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


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

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


 




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


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

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