ÿþD z i s i e j s z y w y k Ba d
P r o g r a m o w a n i e w P e r l u
S k u p i m y s i n a j e d n y m z n a j p o t |n i e j s z y c h n a r z d z i w P e r l u
T a b l i c e a s o c j a c y j n e o r a z f u n k c j e t a b l i c o w e
n a t z w . h a s z a c h :
o m ó w i m y i s t o t h a s z ó w
s p o s o b y i n i c j a l i z a c j i h a s z ó w
M a r c i n J u n c z y s - D o w m u n t
s p o s o b y d o d a w a n i a i u s u w a n i e e l e m e n t ó w
j u n c z y s @ a m u . e d u . p l
s p o s o b y p r z e g l d a n i a h a s z ó w
W y d z i a B M a t e m a t y k i i I n f o r m a t y k i
O m ó w i m y p o w i z a n i a m i d z y h a s z a m i i t a b l i c a m i
h t t p : / / a m u . e d u . p l / ~ j u n c z y s
w t y m s o r t o w a n i e e l e m e n t ó w t a b l i c i h a s z ó w z a p o m o c s o r t
t w o r z e n i e n p . h a s z ó w z t a b l i c z a p o m o c m a p
M a r c i n J u n c z y s - D o w m u n t P r o g r a m o w a n i e w P e r l u 1 / 1 9 M a r c i n J u n c z y s - D o w m u n t P r o g r a m o w a n i e w P e r l u 2 / 1 9
C o t o j e s t h a s z ? I n i c j a l i z a c j a h a s z ó w
1 m y % d z w i e k i = (
H a s z j e s t s t r u k t u r p o d o b n d o t a b l i c y , a l e z a m i a s t i n d e k s ó w
l e w = > " g r r r " ,
l i c z b o w y c h h a s z u |y w a k l u c z y
p i e s = > " h a u " ,
B a r d z i e j s k o m p l i k o w a n a n a z w a d l a h a s z y t o t a b l i c e k o t = > " m i a u " ,
5 " t y g r y s b e n g a l s k i " = > " r o a r "
a s o c j a c y j n e , p o n i e w a | k o j a r z z e s o b k l u c z e i w a r t o [c i
) ;
K l u c z e m h a s z a m o |e b y d o w o l n a w a r t o [ s k a l a r n a , c z y l i
l i c z b a , Ba Dc u c h z n a k o w y ( l u b r e f e r e n c j a )
p r i n t " L e w r o b i " . $ d z w i e k i { " l e w " } . " \ n " ;
P r z e d r o s t k i e m d l a h a s z a j e s t z n a k % , k t ó r y m a p r z y p o m i n a p r i n t " P i e s r o b i " . $ d z w i e k i { p i e s } . " \ n " ;
1 0 p r i n t " K o t r o b i $ d z w i e k i { k o t } \ n " ;
p a r e l e m e n t ó w s k o j a r z o n y c h
p r i n t " T y g r y s r o b i $ d z w i e k i { t y g r y s b e n g a l s k i } \ n " ;
Z a m i a s t n a w i a s ó w [ ] k o r z y s t a m y z { } p r z y o d w o By w a n i u s i d o
w a r t o [c i h a s z ó w
K a n o n i c z n y s p o s ó b i n i c j a l i z a c j i h a s z ó w
H a s z e s j e d n z n a j p o t |n i e j s z y c h i n a j c z [c i e j u |y w a n y c h
K o j a r z y m y z e s o b n a z w y z w i e r z t o r a z w y d a w a n e d zw i k i
c e c h P e r l a
G d y k l u c z s k Ba d a s i z s a m y c h z n a k ó w a l f a n u m e r y c z n y c h ,
P o n o b y p r o g r a m o w a w P e r l u , t r z e b a m y [l e w h a s z a c h
m o |e m y o p u [c i c u d z y s Bó w
M a r c i n J u n c z y s - D o w m u n t P r o g r a m o w a n i e w P e r l u 3 / 1 9 M a r c i n J u n c z y s - D o w m u n t P r o g r a m o w a n i e w P e r l u 4 / 1 9
D o d a w a n i e e l e m e n t ó w d o h a s z ó w U s u w a n i e e l e m e n t ó w z h a s z a
1 m y % h a s z = ( k l u c z 1 = > 1 , k l u c z 2 = > 2 , k l u c z 3 = > 3 ) ;
# m y % h a s z = ( " k l u c z " , 1 , " k l u c z 2 " , 2 , " k l u c z 3 " , 3 ) ;
1 m y % o c z y ;
$ o c z y { k o t } = " 2 " ;
m y $ s k a l a r 1 = d e l e t e $ h a s z { k l u c z 1 } ;
5 # $ s k a l a r 1 r o w n y 1
@ o c z y { m r o w k a , w a z k a } = ( 4 , " m i l i o n " ) ;
5
m y $ s k a l a r 2 = d e l e t e @ h a s h { q w ( k l u c z 1 k l u c z 2 ) } ;
m y @ s t w o r y = q w ( p a n t o f e l e k , c z l o w i e k , p a j a k , m u c h a ) ;
# s k a l a r 2 r o w n y 2
@ o c z y { @ s t w o r y } = ( 0 , 2 , 8 , " d u z o z a d u z o " ) ;
1 0 @ t a b l i c a = d e l e t e @ h a s h { q w ( k l u c z 1 k l u c z 2 k l u c z 3 ) } ;
M o |e m y d o d a w a d o w o l n l i c z b e l e m e n t ó w d o h a s z a
# @ t a b l i c a r o w n a ( u n d e f , u n d e f , 3 )
P o n i e w a | n i e m a o k r e [l o n e j k o l e j n o [c i e l e m e n t ó w w h a s z u , n i e
p o t r z e b u j e m y f u n k c j i t y p u u n s h i f t , p u s h F u n k c j a w b u d o w a n a d e l e t e u s u w a p o d a n e e l e m e n t y z h a s z a
W k o n t e k [c i e s k a l a r n y m z w r a c a o s t a t n i u s u n i t y e l e m e n t l u b
P o d o b n i e j a k d l a t a b l i c i s t n i e j w y c i n k i h a s z ó w
u n d e f j e [l i e l e m e n t n i e i s t n i e j e
K a |d y w y c i n e k z h a s z a j e s t t a b l i c ( ! ) , s t d p r z e d r o s t e k @
W k o n t e k [c i e l i s t o w y m z w r a c a l i s t w s z y s t k i c h u s u n i t y c h
e l e m e n t ó w , w t y m u n d e f , j e [l i j a k i [ z e l e m e n t ó w n i e i s t n i e j e
M a r c i n J u n c z y s - D o w m u n t P r o g r a m o w a n i e w P e r l u 5 / 1 9 M a r c i n J u n c z y s - D o w m u n t P r o g r a m o w a n i e w P e r l u 6 / 1 9
S p r a w d z a n i e c z y e l e m e n t i s t n i e j e w h a s z u P r z e g l d a n i e h a s z ó w - w e d Bu g k l u c z y
1 m y % m i t y = (
1 m y % s l o w n i k = (
y e t i = > 0 ,
s z a f a = > " r z e c z o w n i k " , w i e l k i = > " p r z y m i o t n i k " ,
g w i a z d o r = > " " ,
m r u g a c = > " c z a s o w n i k " , k r o t k o = > " p r z y s l o w e k " ,
w i l k o l a k = > u n d e f
) ;
5 ) ;
5
f o r e a c h ( k e y s % s l o w n i k ) {
c h o m p ( m y $ t e s t = <