![]() |
|
Модераторы: korob2001, ginnie |
![]()
|
|
| Danissimo |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 150 Регистрация: 14.8.2006 Где: Санкт-Петербург Репутация: 1 Всего: 1 |
Пусть даны две хеш-таблицы %new и %$old. Мне нужно удалить из %new все те элементы, значения которых равны значениям соответсвующих элементов в %oldю Вот как я это делаю:
Меня смущает последняя строчка в условии. Ведь если перл не сможет преобразовать чтроку в число, он подставит 0. Получится, что с обоих концов численного сравнения будут стоять 0, => равенство выполняется. Как разрулить? |
|||
|
||||
| nitr |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2543 Регистрация: 10.2.2006 Где: Россия :) Репутация: 37 Всего: 84 |
хм... а можно оставить так
смотри внимательно, там значения как цифры, так и текст Добавлено @ 17:14
посмотри на результат этого очень простого кода ;) |
||||
|
|||||
| korob2001 |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2871 Регистрация: 29.12.2002 Репутация: 31 Всего: 61 |
Можно ещё так попробовать:
Если нужно узнать элементы с какимими значениями были удалены, то можно сделать так:
-------------------- "Время проходит", - привыкли говорить вы по неверному пониманию. "Время стоит - проходите вы". |
||||
|
|||||
| Nab |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 582 Регистрация: 25.3.2006 Где: Kiev Репутация: 26 Всего: 37 |
korob2001, не прокатит если будет '5' и '5.0' или '05', хотя в реальности эти значения равны....
Описанный тобой вариант, это из той оперы когда мы тут недавно искали разности массивов, здесь тоже можно при уникальности этих значений просто перевернуть хеш. Но этого в условии нет -------------------- Чтобы правильно задать вопрос нужно знать больше половины ответа... Perl Community FREESCO in Ukraine |
|||
|
||||
| korob2001 |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2871 Регистрация: 29.12.2002 Репутация: 31 Всего: 61 |
Понял
Это сообщение отредактировал(а) korob2001 - 17.12.2006, 17:32 -------------------- "Время проходит", - привыкли говорить вы по неверному пониманию. "Время стоит - проходите вы". |
|||
|
||||
| Danissimo |
|
||||||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 150 Регистрация: 14.8.2006 Где: Санкт-Петербург Репутация: 1 Всего: 1 |
Да, проблема в том, что, скажем, имея
значение с ключом 'key' будет удалено, а не должно, так как 'value' != 0. Вот это и есть опасность. Поэтому, видимо, как korob и предложил, без РВ не обойтись. Я вот как сделал:
Вот на чем я тестировал:
Добавлено @ 14:18 Да, надо заметить, что по условию, кроме неопределенного, других значений false ('', '0', 0) в хеш-таблицах нету. |
||||||
|
|||||||
| nitr |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2543 Регистрация: 10.2.2006 Где: Россия :) Репутация: 37 Всего: 84 |
Danissimo, не знаю... попытался с твоим и что? вывело всё нормально...
где ошибка?
ты глядел мой код? Добавлено @ 19:26 это результат
|
||||
|
|||||
| korob2001 |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2871 Регистрация: 29.12.2002 Репутация: 31 Всего: 61 |
Не понял. Что значит нету? Запусти такой код:
Это сообщение отредактировал(а) korob2001 - 19.12.2006, 07:44 -------------------- "Время проходит", - привыкли говорить вы по неверному пониманию. "Время стоит - проходите вы". |
||||
|
|||||
| Danissimo |
|
||||||||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 150 Регистрация: 14.8.2006 Где: Санкт-Петербург Репутация: 1 Всего: 1 |
Уж и не знаю, чего ты там пытался, что вывело и что нормально, но я запустил твой код:
с моими данными, и вот результат:
Не работает, батенька =) И Nab уже об этом говорил, правда, в ответ на пост Korob'а. Добавлено @ 13:08
Это было уточнение. Данные в хеш-таблицах таковы, что лжи, кроме как undef, в них не встретится. Таковы данные, с которыми я работаю. |
||||||||
|
|||||||||
| nitr |
|
||||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2543 Регистрация: 10.2.2006 Где: Россия :) Репутация: 37 Всего: 84 |
Хорошо, а что же должно быть в %new, если такие данные:
remove1 равны remove3 равны остаются remove2, retain1, retain2 Что не так? |
||||||
|
|||||||
| nitr |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2543 Регистрация: 10.2.2006 Где: Россия :) Репутация: 37 Всего: 84 |
'remove2' => '2e-1', и 'remove2' => '.2',
будут равны если убрать кавычки ;) (заметил Nab ;) ) |
|||
|
||||
| Danissimo |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 150 Регистрация: 14.8.2006 Где: Санкт-Петербург Репутация: 1 Всего: 1 |
Хм. Да, работает. А зуб дашь, что это именно то, что мне требуется? У меня вот сомнения есть. Не могу, правда, привести пример, когда твой вариант сфейлится, но почему-то сомневаюсь я в нем. Не нравится мне eq для стравнения чисел.
Да, и еще, ты вот говоришь, если убрать кавычки, то твой вариант будет работать. Согласен. Но!.. я-то забираю данные из БД. => я не управляю кавычками. Если в БД поле строковое, то и вернется строка. Читай, как будто с кавычками. Вобщем, интересно было узнать, что eq может сравнивать не только строки, но уверенности в том, что твой вариант сработает как надо, к сожалению, нету. |
|||
|
||||
| nitr |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2543 Регистрация: 10.2.2006 Где: Россия :) Репутация: 37 Всего: 84 |
Но с твоим вопросам "КАВЫЧКИ" я ответить не могу Из законов написания и других в математике число 0.2 нельзя записать как .2 Это как одна из ошибок Или может korob знает. Скажу точно, что Ларри знает |
||||
|
|||||
![]()
|
| Правила форума "Perl" | |
|
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Perl: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |