Here's the solution to previous post. ------------------------------- perl code:
sub sort_matrix($$) { my $ref_matrix = $_[0]; my @indexMatrix = @{$_[1]}; my @indexes = map {$_->[0]} @indexMatrix; my @operators = map {$_->[1] ? ' cmp ' : ' <=> '} @indexMatrix; my @directions = map {$_->[2]} @indexMatrix; my $body_code = ''; my @body_array; for (my $i = 0; $i <= $#indexes; $i++) { if ($directions[$i]) { push(@body_array, "(\$a->[$i]" . $operators[$i] . "\$b->[$i])"); } else { push(@body_array, "(\$b->[$i]" . $operators[$i] . "\$a->[$i])"); }; }; $body_code = join( ' or ', @body_array); my $array_code = '(map { [' . join(q(, ), map {"\$_->[$_]"} @indexes) . ', $_]} @$ref_matrix)'; my $code = "map {\$_->[-1]} (sort { $body_code} $array_code)"; my @result = eval $code; return [EMAIL PROTECTED]; }; ------------------------------------------ Python code # python v 2.4 def sort_matrix(matrix, directives): result=matrix for dir in directives: if dir[1]: if dir[2]: result.sort(lambda x,y: cmp( str(x[dir[0]]), str(y[dir[0]])) ) else: result.sort(lambda x,y: cmp( str(x[dir[0]]), str(y[dir[0]])), None, True) else: if dir[2]: result.sort(lambda x,y: cmp(float(x[dir[0]]), float(y[dir[0]])) ) else: result.sort(lambda x,y: cmp(float(x[dir[0]]), float(y[dir[0]])), None, True ) return result m = [ [3, 99, 'a'], [2, 77, 'a'], [1, 77, 'a'] ] print sort_matrix(m,[ [2,True,True], [1,False,True] ]) The Python code has not been tested much. http://xahlee.org/perl-python/sort_matrix.html Xah [EMAIL PROTECTED] â http://xahlee.org/PageTwo_dir/more.html â -- http://mail.python.org/mailman/listinfo/python-list