| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Perl: Общие вопросы > Использовать хэш или масссив? |
| Автор: meridian 29.11.2009, 17:08 |
| Привет всем! Есть вычисляемая переменная $a В зависимости от ее значения, а именно вхождения в границы [0..5], [6..10], [11..15] и т.д., нужно присвоить значение $a другой переменной, ассоциированной для каждого периода, например, если $a = 4, то присваем это значение $c0_5 если $a = 13, то присваем это значение $c11_15 и т.д. С помощью if че то длинно получается. Спасибо. |
| Автор: meridian 29.11.2009, 18:12 | ||||
Все верно, как указаны , так и идут [0..5], [6..10], [11..15], далее по пять до 30-ти |
| Автор: admsasha 29.11.2009, 18:34 | ||||
типа, вот так тогда... правда, не самый лучший вариант...
|
| Автор: meridian 29.11.2009, 23:20 |
| Понятно, спасиб! Еще вопрос Как узнать, принадлежит ли значение переменной $diff к какому-либо из этих вхождений [0..5], [6..10], [11..15], и т.д. Можно сделать с if или SWITCH: А покороче есть варианты ? |
| Автор: arto 30.11.2009, 01:06 |
| perl -E 'given ($ARGV[0]) { when ([0..5]) { say "one"; } when ([6..10]) { say "two"; } }' |
| Автор: meridian 30.11.2009, 01:56 | ||
Понял, спб. Given есть аналог SWITCH, почти все так же. |
| Автор: admsasha 30.11.2009, 03:05 | ||||
Из условия,
|
| Автор: meridian 30.11.2009, 12:11 | ||||||
Саша, я ж и написал, "А покороче есть варианты?". Твой вариант был первый, что можно сделать по быстрому |
| Автор: Bulat 30.11.2009, 13:20 | ||||
| meridian, а если сделать массив(т.е. заранее объявить всевозможные подмножества одного множества от 0 до 30), где [0..5], [6..10], [11..15] - индексы массива, а значения индексов будут одинаковы для каждого из отрезков. Т.е.
$array[$a] - смотрим что возвращает, собственно аналог варианта с хэшем для более короткого присвоения значений массива можно использовать цикл
собственно для еще большего упрощения можно отдельно обработать случай с нолем, а для остальных делить и на 5 и округлять до целого (POSIX::ceil - вернет округленное значение в большую степень, т.е. для от 0,0...1 до 1 вернет 1, от 1,0...1 до 2 вернет 2 и т.д.) - это целое и будет индексом подмножества, т.е. part <index> таким образом можно обработать дальше 30... хоть до 3 000 000 |
| Автор: krypt3r 30.11.2009, 15:43 | ||
|
| Автор: meridian 30.11.2009, 16:07 |
| Масса вариантов, гуд. Спасибо всем! |