Upcoming SlideShare
×

# Cs3430 lecture 17

296 views

Published on

Published in: Education
0 Likes
Statistics
Notes
• Full Name
Comment goes here.

Are you sure you want to Yes No
• Be the first to comment

• Be the first to like this

Views
Total views
296
On SlideShare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
2
0
Likes
0
Embeds 0
No embeds

No notes for slide

### Cs3430 lecture 17

1. 1. Python & Perl Lecture 17 Department of Computer Science Utah State University
2. 2. Outline ● Array References ● Multi-dimensional Arrays ● Sorting Arrays ● Hashes
3. 3. Array References
4. 4. Array References ● It is possible to get references to arrays ● An array reference is an address of the first element ● If @ary is an array, then @ary is a named reference to @ary ● Example: \$ary0_ref = @ary; ● You can get multiple named references to the same array
5. 5. Example array_refs_01.pl
6. 6. Array References ● If @ary is an array and \$ary_ref is a reference to it, then you can use \$ary_ref to access individual elements of @ary ● Example: my @ary = (1 .. 5); my \$ary_ref = @ary0; \$ary_ref->[0] ## refers to 1 \$ary_ref->[4] ## referes to 5
7. 7. Array References ● You can assign values to references to destructively modify arrays ● For example, if \$ary0_ref is a reference to and @ary0 and a reference to it, then you can use \$ary1_ref is a reference to @ary1 the references can be used to assign elements of one array ● Here is how you can assign the first value of @ary1 to the first value of @ary0: \$ary0_ref->[0] = \$ary1_ref->[0];
8. 8. Example array_refs_02.pl
9. 9. Multi-dimensional Arrays
10. 10. Construction & Iteration ● Multi-dimensional arrays can be constructed with named and anonymous array references ● Suppose @row0, @row1, and @row2 are arrays and \$row_ref0, \$row_ref1, and \$row_ref2 are named references ● Then you can construct a 2D array @rslt as @rslt = (\$row_ref0, \$row_ref1, row_ref2); ● \$rslt[\$r]->[\$c] refers to element at r, c
11. 11. Example multidim_arrays_01.pl
12. 12. Anonymous References ● Using anonymous array references is more straightforward if you do not need to refer to sub- arrays by names ● Example: @ary = ([1, 2, 3], ['a', 'b', 'c']) constructs a 2x3 array with anonymous references (i.e., references to [1, 2, 3] and ['a', 'b', 'c'] are not named) ● \$ary[\$r][\$c] refers to element at r, c
13. 13. Iterating over Anonymous References ● You can use foreach to iterate over the sub-arrays ● Example: foreach my \$aref (@ary) { … }, \$aref iterates over anonymous references to sub-arrays ● @{\$aref} is the sub-array to which \$aref currently refers ● Example: foreach my \$e (@{\$aref}) { … } iterates over the scalars in @{\$aref}
14. 14. Example multidim_arrays_02.pl
15. 15. Variable Length Rows ● Rows in multi-dimensional arrays do not have to be of the same length ● You can use \$#{} notation to obtain the number of elements in each row ● Example: if @ary2 is a 2D array, \$#{ary2[\$r]}+1 is the length of row \$r ● Example: if @ary3 is a 3D array, \$#{ary3[\$r][\$c]}+1 is the length of row at \$r, \$c
16. 16. Sorting Arrays
17. 17. Default Sorting Settings ● The sort function by default sorts its argument array/list alphanumerically (i.e., it treats array/list elements as strings) ● In other words, even if all elements in in the argument array/list are numbers, they are sorted as strings ● The sort function returns a sorted copy of its array/list argument
18. 18. Example sort_01.pl
19. 19. Customized Sorting ● You can explicitly customize sorting to work on strings and numbers ● If you want to have an array/list sorted numerically, use { \$a <=> \$b } ● If you want to have an array/list sorted alphanumerically, use { \$a cmp \$b } ● Example: sort { \$a <=> \$b } (5 , 1, 3); ● Example: sort { \$a cmp \$b } qw(Perl Python);
20. 20. Example sort_02.pl
21. 21. Hashes
22. 22. Hashes ● A hash is a one-to-one mapping from keys to values ● Keys are not ordered ● A hash variable must be marked with the % type identifier ● Three main type identifiers:  \$ - scalar  @ - array  % - hash
23. 23. Hash Construction ● A hash can be constructed from a list of comma- separated key-value pairs ● A hash can be constructed by inserting key-value pairs into it ● A hash can be constructed from a list with the => operator
24. 24. construct_hash_01.pl construct_hash_02.pl Example
25. 25. Hash Manipulation ● Once a hash exists, one can:  Get the keys  Get the values  Iterate through the key-value pairs  Swap the keys and values  Check if a key exists or is defined
26. 26. manip_hash_01.pl manip_hash_02.pl Example
27. 27. Reading & References ● http://perldoc.perl.org/ ● James Lee. Beginning Perl, 2nd Edition, APRESS ● Dietel, Dietel, Nieto, McPhie. Perl How to Program, Prentice Hall