![]() |
Модераторы: korob2001, ginnie |
![]() ![]() ![]() |
|
Wardrag |
|
||||
Новичок Профиль Группа: Участник Сообщений: 20 Регистрация: 19.10.2011 Репутация: нет Всего: нет |
Имеется структура вида:
Она описывает структуру стран и городов. В каждой стране свой город/города. Хочу проверить, существует ли айди с конкретным городом перед тем, как его добавить в эту структуру. В хэш городов добавляю так (проверил через Dumper - правильно)\:
Но совершенно не понимаю, как мне искать город по айди, если его нет, и добавить его в хэш. В будущем надо будет по аналогии искать по айди страну, и, если её нет, добавлять тоже, но уже в первый хэш(их же два). Скажите, пожалуйста, как это сделать ? Очень интересует именно такая структура. Это сообщение отредактировал(а) Wardrag - 1.10.2013, 11:34 |
||||
|
|||||
krypt3r |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 359 Регистрация: 9.6.2009 Репутация: 2 Всего: 16 |
PS. У вас странная структура. Что у вас делают названия стран в элементе towns (города)? |
|||
|
||||
Wardrag |
|
|||
Новичок Профиль Группа: Участник Сообщений: 20 Регистрация: 19.10.2011 Репутация: нет Всего: нет |
Придумал, как смог : ). А как оптимальнее было бы ?
|
|||
|
||||
krypt3r |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 359 Регистрация: 9.6.2009 Репутация: 2 Всего: 16 |
Ну что-то типа такого
|
|||
|
||||
Wardrag |
|
||||||
Новичок Профиль Группа: Участник Сообщений: 20 Регистрация: 19.10.2011 Репутация: нет Всего: нет |
Хм, не понимаю, - как вообще
Я бы начал так:
Я так понимаю, вы ссылаетесь сразу на
И ещё: как так работает цикл for, что ему не нужно знать число элементов ? Я думал, что всегда нужно сперва их узнать, а потом вести перебор... Все примеры, что я видел, перебирали через foreach Добавлено через 6 минут и 36 секунд Кажется, начинаю понимать: @{$arr} - ссылка на массив %{arr} - ссылка на хэш Они нужны, чтобы удобно делать перебор Это сообщение отредактировал(а) Wardrag - 1.10.2013, 12:16 |
||||||
|
|||||||
krypt3r |
|
||||||||||||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 359 Регистрация: 9.6.2009 Репутация: 2 Всего: 16 |
Не так. Это операция разыменования ссылки на массив
for/foreach-у нужен массив, а не ссылка на него. Тут явно происходит разыменование массива, лежащем в towns. Каждый элемент массива — это хэш типа {town_id => 10, text => 'Austria'}.
foreach — это синоним for с вытекающей отсюда взаимозаменяемости. Замените в моем коде for на foreach, если вам так более наглядно будет.
Или так можно написать
Или вот так
Выбирайте вариант, короче, более читабельный для вас. PS. Если у вас цель — разобраться со сложными структурами данных в перле (хэш хэшей, массив хэшей, хэш массивов и т.д.), то посоветую почитать, например, "Perl. Специальный справочник" Стивена Холзнера. Там в главе "Структуры данных" они рассмотрены Это сообщение отредактировал(а) krypt3r - 1.10.2013, 13:04 |
||||||||||||
|
|||||||||||||
Wardrag |
|
|||
Новичок Профиль Группа: Участник Сообщений: 20 Регистрация: 19.10.2011 Репутация: нет Всего: нет |
В инете кучу материалов просмотрел, но так и не разобрался сам, а с Ваши слов и объяснений вроде как понял.
Огромное спасибо ))))). |
|||
|
||||
krypt3r |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 359 Регистрация: 9.6.2009 Репутация: 2 Всего: 16 |
Да не за что. Пост выше, кстати, немного поредактировал
|
|||
|
||||
Wardrag |
|
|||
Новичок Профиль Группа: Участник Сообщений: 20 Регистрация: 19.10.2011 Репутация: нет Всего: нет |
Хм, возникла проблема - добавить элемент в хэш, причем самый первый struct
Запушить выходит нельзя ничего, кроме массива, дык как же тогда добавить его ?) ( в самом моем первом посте) Смысл: создать элемент с ещё одним id country_id=2 и т.д. Пытаюсь добавить целый хэш ( дошло, тупо скопировал его и сменил параметры), а оно выдает ошибку мол ссылка не на массив. Выходит, так нельзя ? |
|||
|
||||
krypt3r |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 359 Регистрация: 9.6.2009 Репутация: 2 Всего: 16 |
В $struct вы не можете добавить ключ country_id, ибо он уже существует. Нужно переделывать $struct в массив хэшей типа
Если я неправильно понял, покажите код и желаемую структуру данных. |
|||
|
||||
Wardrag |
|
|||
Новичок Профиль Группа: Участник Сообщений: 20 Регистрация: 19.10.2011 Репутация: нет Всего: нет |
У меня country_id связан с массивом хэшей towns
Вот так вот: country_id => towns => [{ тут города страны } ] (так получилось после добавления нового country_id) Добавил обычным присваиванием в хэш. Но из-за этого нужно сначала в цикле набивать города, а потом огромный хэш сохранить вмести с городами и новым айди страны, затем меняется айди страны( по возрастанию или с переменной), опять прогоняются города, разумеется, все разные. Вот что я хочу сделать... Это сообщение отредактировал(а) Wardrag - 1.10.2013, 14:33 |
|||
|
||||
Wardrag |
|
|||
Новичок Профиль Группа: Участник Сообщений: 20 Регистрация: 19.10.2011 Репутация: нет Всего: нет |
Написал на email : ). Проверьте, пожалуйста!
Это сообщение отредактировал(а) Wardrag - 1.10.2013, 20:23 |
|||
|
||||
infarch |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 526 Регистрация: 13.3.2009 Репутация: нет Всего: 1 |
А вы уверены что не хотите пользоваться базами данных вместо всех эти мегахешей? SQLite поможет отцу русской демократии )
|
|||
|
||||
Grost |
|
||||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 65 Регистрация: 26.8.2010 Где: Москва Репутация: нет Всего: нет |
Не знаю, правильно ли я понял задачу, но почему не сделать структуру в которой проще будет искать? Т.е. мы делаем не массив хешей, а просто хеш.
таким образом, мы можешь легко и просто доставать нам нужную информацию.
|
||||
|
|||||
![]() ![]() ![]() |
Правила форума "Perl" | |
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Perl: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |