• Used to group
multiple strings together in a single variable
• Specified by a
variable name followed by an index enclosed in parentheses.
– set
my_array(1) value
– set
my_array(one) another_value
• Multidimensional
arrays can be simulated
• array names
Returns a list of the indexes for all values stored
in the array named
Array Commands:
• array set
– Initialize
an array
• array names
– Returns
all array index
• parray
– Print
array
• array unset
– Un-initialize
the array
• array exists
– Returns
1 is varName is an array, 0 otherwise
• array size
– Returns
number of elements in the array
Tcl Array – Examples
% array set arrayVar \
{ 1 one 2 two 3 three }
% parray arrayVar
arrayVar(1) = one
arrayVar(2) = two
arrayVar(3) = three
% set arrayVar(4) four
four
% parray arrayVar
arrayVar(1) = one
arrayVar(2) = two
arrayVar(3) = three
arrayVar(4) = four
% array names arrayVar
4 1 2 3
% array exists arrayVar
1
% set name gaurav
gaurav
% array exists name
0
% array size arrayVar
4
% array unset arrayVar
% parray arrayVar
"arrayVar" isn't an array
%
A Tcl array is a collection of variables. Each variable may
hold any value and the array is indexed by arbitrary values. The key-value
pairs are unordered. A Tcl array is an associative array.
Creating arrays:
Tcl arrays can be
created with the set or array set commands.
EXAMPLE 1:
#!/usr/bin/tclsh
set names(1) Jane
set names(2) Tom
set names(3) Elisabeth
set names(4) Robert
set names(5) Julia
set names(6) Victoria
puts [array exists
names] àprints 1
puts [array size
names] à prints 6
puts $names(1) ->prints Jane
puts $names(2) ->prints Tom
puts $names(6) ->prints Victoria
We create an array called
names
. The
numbers are keys and the names are values of the array.
set names(1) Jane
In this line we set a value Jane to the array key 1. We can
later refer to the value by the key.
puts [array exists names]
The
array exists
command determines whether the provided argument
is an array.
puts [array
size names]
We get the size of the array with the
array size
command.
EXAMPLE2:
#!/usr/bin/tclsh
array set days {
1 Monday
2 Tuesday
3 Wednesday
4 Thursday
5 Friday
6 Saturday
7 Sunday
}
set n [array size
days]
puts $days(1) àPrints Monday
puts "array has
$n elements" àPrints array
has 7 elements
Arrays are collections of variables:
Unlike in lists or
dictionaries, items in arrays are variables. This means that we can make
references to them.
#!/usr/bin/tclsh
array set days {
1 Monday
2 Tuesday
3 Wednesday
4 Thursday
5 Friday
6 Saturday
7 Sunday
}
upvar #0 days(1) mon
upvar #0 days(2) tue
upvar #0 days(3) wed
puts $mon prints à Monday
puts $tue prints à Tuesday
puts $wed prints à Wednesday
In the script three variables of the
days
array are referenced with the upvar
command.
upvar #0 days(1) mon
The
mon
variable references the variable indexed with 1.
The first argument of the upvar
command is the uplevel, where #0
means the toplevel. That is, both the days
array and the mon
variable reside in the same global namespace.
The array get command
The array get command returns a list containing pairs of
elements of the array.
#!/usr/bin/tclsh
array set days {
Peter 34
Jane 17
Lucy 28
Mark 43
Anthony 36
}
puts [array get days]
The example creates an array and prints its key-value pairs
with the
array get
command.
Traversing arrays:
In the following examples, we will show how to traverse
arrays.
#!/usr/bin/tclsh
array set days {
1 Monday
2 Tuesday
3 Wednesday
4 Thursday
5 Friday
6 Saturday
7 Sunday
}
foreach {n day} [array get days] {
puts "$n
-> $day"
}
The example creates an array and prints its key-value pairs
with the
array get
command.
The
array get
command returns a list of key, value elements,
which can be iterated with the foreach
command.
Removing elements:
In the last example of this chapter, we will show how to
remove elements from the array
#!/usr/bin/tclsh
set names(1) Jane
set names(2) Tom
set names(3)
Elisabeth
set names(4)
Robert
set names(5) Julia
set names(6)
Victoria
puts [array size
names]
unset names(1)
unset names(2)
puts [array size
names]
We create a
names
array. We use the unset
command to remove items from the array. We check
the size of the array before and after we remove the two items.
set names(1) Jane
The
set
command is used to create an item in the array.
unset names(1)
We use the
unset
command to remove an element with key 1 from the
array.
EXAMPLES:
#Create array and print all elements in array
array set arrayvar {1
one 2 two 3 three}
puts [parray arrayvar]
puts [array names
arrayvar]
puts [array size
arrayvar]
puts [array get
arrayvar]
puts [array exists
arrayvar]
# Used as a one
dimensional array
for { set i 0 } { $i
< 8 } { incr i } {
set base($i) $i
puts "base($i) = $base($i)"
}
Output:
base(0) = 0
base(1) = 1
base(2) = 2
base(3) = 3
base(4) = 4
base(5) = 5
base(6) = 6
base(7) = 7
# Used as a two dimensional array
# NOTE:
"$i,$j" is a single string which is the index like "0,1"
for { set i 0 } { $i
< 3 } { incr i } {
for { set j 0 } { $j < 3 } { incr j } {
set base($i,$j) $i
puts "base($i,$j) = $base($i,$j)"
}
}
Output:
base(0,0) = 0
base(0,1) = 0
base(0,2) = 0
base(1,0) = 1
base(1,1) = 1
base(1,2) = 1
base(2,0) = 2
base(2,1) = 2
base(2,2) = 2
Example:
array set arr [list
{1} {hari} {2} {Rajesh} {3} {Ram}]
foreach id [array
names arr] {
puts "$arr($id)
has ID No : $id"
}
if {[array exists
arr]} {
puts "Array
Exists"
} else {
puts "Array Does
Not Exists"
}
puts "Total Array
Items are : [array size arr]"
puts "Array
Numbers in list are : [array names arr]"
puts "Name of
persons in the arraylist are : $arr(1) $arr(2) $arr(3)"
TCL Lists and Arrays
TCL has many facilities for manipulating lists, which are collections of items separated by whitespace. For example, "llength" returns the number of items in
a list, "lindex" returns the Nth item in a list starting at item 0, "lrange" returns a range of items from a list, and "lsearch" returns the location of a
list item that matches a given value:
% set days "Mon Tue Wed Thu Fri Sat Sun"
Mon Tue Wed Thu Fri Sat Sun
% llength $days
7
% lindex $days 0
Mon
% lindex $days 1
Tue
% lrange $days 3 5
Thu Fri Sat
% lrange $days 5 end
Sat Sun
% lsearch $days Wed
2
The variables we have seen so far are examples of TCL "scalar" variables, which store a single text value. The text value might be a single numeric item, or
a whitespace-separated collection of items of any length TCL also includes associative arrays which allow many values to be assigned to a variable
according to an array index. In the case of many programming languages such as C, an array index will be one or more integer numbers. However in TCL, the
array index can be any text value.This is a powerful feature for organizing data, and it also allows us to simulate the use of conventional
multidimensional arrays in TCL.
TCL array variables are specified by an array name and an array index in ( ) parenthesis.As noted, the array index can be any text value, numeric or
otherwise. The assigned value can also be any text value, numeric or otherwise For example:
set monthInfo(1) Jan
set monthInfo(2) Feb
set dayInfo(30) "Sep Apr Jun Nov"
set dayInfo(31) "Jan Mar May Jul Aug Oct Dec"
set dayInfo(28) "Feb"
set mass(H) 1.0
set mass(He) 4.0
set mass(C) 13.0
Values of an array variable are extracted using $ dollar-sign substitution, as with scalar variables. The interesting detail is that the array index ca
also be specified in terms of a TCL expression. So, given the definitions above, from the nmrWish command line:
% puts $dayInfo(30)
Sep Apr Jun Nov
% puts $monthInfo([expr 1 + 1])
Feb
% set atom He
He
% puts $mass($atom)
4.0
To simulate a conventional multidimensional array, we can use a TCL array index composed of one or more integers, usually separated by a character such as
the "," comma.For example, we can build an array index which simulates a three-dimensional matrix location, by using three integer values to create the
index:
set ix 0
set iy 0
set iz 0
set a($ix,$iy,$iz) 1.14
Note again that the TCL array index is interpreted as an exact text value, not as a numeric one.So, space characters, decimal points, etc., change the
interpretation of the array index. In the example above, the array index is the exact five-character text value "0,0,0"for another example, the
following cases all refer to different array elements:
$m(1)
$m(1.0)
$m(1.00)
$m( 1)
$m(001)
The standard TCL command "info exists" can be used to test whether or not a given array value has been defined.
ARRAYS:
The syntax for an associative array
is to put the index within parentheses:
set
name(first) "Mary"
set
name(last) "Poppins"
puts
"Full name: $name(first) $name(last)"
There are several array commands
aside from simply accessing and creating arrays which will be discussed in this
and the next lesson.
array exists arrayName
Returns 1 if arrayName is an array variable. Returns 0 if arrayName is a scalar variable, proc, or does not exist.
array names arrayName ?pattern
Returns a list of the indices for the associative array arrayName. If pattern is supplied, only those indices that match pattern are returned. The match is done using the globbing
technique from string match.
array size arrayName
Returns the number of elements in array arrayName.
array get arrayName
Returns a list in which each odd member of the list (1, 3,
5, etc) is an index into the associative array. The list element following a
name is the value of that array member.
array set arrayName
dataList
Converts a list into an associative array. DataList is a list in the format of that returned by array
get. Each odd member of the list (1, 3,
5, etc) is an index into the associative array, and the list element following
that is the value of that array member.
array unset arrayName
?pattern?
Unsets all of the elements in the array. If pattern exists, only the elements that match pattern are unset.
Convert list to
array:
set lst "1 2 3 4"
array set name $lst
puts [array get name]
=================================================
Example for
using unset ini array
set info(name) "shiva prasad"
set info(age) "31"
foreach index [array name info] {
puts "$index = $info($index)"
}
puts [array size info]
puts [array unset info age]
foreach index [array name info] {
puts "$index = $info($index)"
}
puts [array size info]
output:
age = 31
name = shiva prasad
2
name = shiva prasad
1
No comments:
Post a Comment
Note: only a member of this blog may post a comment.