Tek-Tips is the largest IT community on the Internet today!

Members share and learn making Tek-Tips Forums the best source of peer-reviewed technical information on the Internet!

  • Congratulations strongm on being selected by the Tek-Tips community for having the most helpful posts in the forums last week. Way to Go!

comparing element in a list

Status
Not open for further replies.

jloh81

Programmer
Jun 15, 2010
16
US
hi,

I am new to tcl language, just started 1 month ago. I need some help here:

I want to compare the element in the list and get the biggest value and store it. What command should i use?

numberlist [15 30 22 75 50 30A 150 110]

Please advice
Thanks!
 
Since you have "30A" I'm assuming that's hex, otherwise I don't know what you mean by "biggest".

Also, the square brackets, [], imply command substitution; you should use curly brackets, {}.

lsort will probably be useful to you:
Code:
% set numberlist {15 30 22 75 50 0x30A 150 110}
15 30 22 75 50 0x30A 150 110
% set numberlist [lsort -integer $numberlist]
15 22 30 50 75 110 150 0x30A
% puts [lindex $numberlist end]
0x30A
%

_________________
Bob Rashkin
 
if without the 30A?
can i use the
lsort command command

how to use this?
 
i have another question:

what happen if my list is i get from a database which i set it to
foreach part $partno{
set count ""
set count [<command> $partno]
}
set y 1
foreach x count{
if $x>=$y {
set y $x
} else {
set y $y
puts $y
}
}

i want to get max value from the list.
please advice.
 
I'm sorry but I don't understand your question. Wherever your list comes from, you can sort it with lsort. List sorting can take a lot of different forms:
EXAMPLES
Sorting a list using ASCII sorting:

% lsort {a10 B2 b1 a1 a2}
B2 a1 a10 a2 b1

Sorting a list using Dictionary sorting:

% lsort -dictionary {a10 B2 b1 a1 a2}
a1 a2 a10 b1 B2

Sorting lists of integers:

% lsort -integer {5 3 1 2 11 4}
1 2 3 4 5 11
% lsort -integer {1 2 0x5 7 0 4 -1}
-1 0 1 2 4 0x5 7

Sorting lists of floating-point numbers:

% lsort -real {5 3 1 2 11 4}
1 2 3 4 5 11
% lsort -real {.5 0.07e1 0.4 6e-1}
0.4 .5 6e-1 0.07e1

Sorting using indices:

% # Note the space character before the c
% lsort {{a 5} { c 3} {b 4} {e 1} {d 2}}
{ c 3} {a 5} {b 4} {d 2} {e 1}
% lsort -index 0 {{a 5} { c 3} {b 4} {e 1} {d 2}}
{a 5} {b 4} { c 3} {d 2} {e 1}
% lsort -index 1 {{a 5} { c 3} {b 4} {e 1} {d 2}}
{e 1} {d 2} { c 3} {b 4} {a 5}

Stripping duplicate values using sorting:

% lsort -unique {a b c a b c a b c}
a b c

More complex sorting using a comparison function:

% proc compare {a b} {
set a0 [lindex $a 0]
set b0 [lindex $b 0]
if {$a0 < $b0} {
return -1
} elseif {$a0 > $b0} {
return 1
}
return [string compare [lindex $a 1] [lindex $b 1]]
}
% lsort -command compare \
{{3 apple} {0x2 carrot} {1 dingo} {2 banana}}
{1 dingo} {2 banana} {0x2 carrot} {3 apple}

_________________
Bob Rashkin
 
You can sort the list with or without hex elements (0x30A) as shown in the response code sample above.


what happen if my list is i get from a database which i set it to
foreach part $partno{
set count ""
set count [<command> $partno]
}

It is hard to infer what you are trying to do from your question. If you get a list from database then you may not need to recreate/duplicate it.

Assuming $partno is the list, then use the code as indicated in the response post to sort it! Here is slightly different version to help you further.

Code:
# first sort the list from MIN to MAX
set sorted_partno [lsort -integer $partno]

# Get the MAX
set MAXnum [lindex $sorted_partno end]

# We now have MAX number in the list and print it!
puts "MAX value in the list: $MAXnum"
 
Status
Not open for further replies.

Part and Inventory Search

Sponsor

Back
Top