Scripting 获取字符串中的每个数字并在TCL/tk中进行比较

Scripting 获取字符串中的每个数字并在TCL/tk中进行比较,scripting,tcl,tcltk,Scripting,Tcl,Tcltk,我有字符串输出: 1 4 2 1 4 我想让字符串中的每个字符进行比较。 我这样做是想知道列表是否已排序。要获取字符串中的每个字符,请执行split$the_string”“(是的,在空字符串上)。这将为您提供字符串中所有字符的列表;您可以使用foreach对它们进行迭代。请记住,您可以一次迭代两个(或多个)列表: foreach c1 [split $the_string ""] c2 $target_comparison_list { if {$c1 ne $c

我有字符串输出:

1 4 2 1 4
我想让字符串中的每个字符进行比较。
我这样做是想知道列表是否已排序。

要获取字符串中的每个字符,请执行
split$the_string”“
(是的,在空字符串上)。这将为您提供字符串中所有字符的列表;您可以使用
foreach
对它们进行迭代。请记住,您可以一次迭代两个(或多个)列表:

foreach c1 [split $the_string ""] c2 $target_comparison_list {
    if {$c1 ne $c2} {
        puts "The first not equal character is “$c1” when “$c2” was expected"
        break
    }
}

请注意,在发现差异后继续比较很少有用,因为最常见的差异是(相对于目标字符串)插入和删除;在这两种情况下,几乎所有的事情都会有所不同。

我不太清楚你想要实现什么。通过“了解列表是否已排序”,并假设有一个整数列表,您可以使用
tcl::mathop::只需在元素之间循环,并检查前一个元素是否小于/大于当前元素,对吗?是的。首先,我将比较第一个元素和其他元素。然后是第二个元素……检查源代码后,Tcl似乎没有使用冒泡排序算法对列表进行排序。尽管如此,如果仅仅对已经排序的列表进行排序比第一次使用脚本循环进行检查要慢,我还是会感到惊讶。如果是未排序的列表,影响会更大。Tcl使用mergesort,因为它既快速又稳定。
if {[tcl::mathop::<= {*}$list]} {
    puts "List is sorted"
} else {
    puts "List is mixed up"
}
tcl::mathop::< {*}[lsort -indices -dictionary $list]