sorting - 按照以下模式获取列表的唯一元素

标签 sorting tcl

我正在尝试使用以下行为获取 lsort 命令,假设我有一个变量 &

set variable {a a a a b b b b c c c c }

期望的输出是

a b c d

如果变量是

set variable { b b  d d c c c c }

期望的输出是

b d c

如果变量是

set variable { z z z a a a b b  }

期望的输出是

z a b  

基本上我想要列表中唯一的元素,但首先重复的元素应该首先出现在输出中,最后重复的元素应该出现在最后。以上是我的案例可能出现的情况

我尝试过 lsort - unique 。但这是基于字母顺序的排序。

感谢您的帮助

PS:我的变量肯定包含重复的元素,第一次重复的元素最后不会再重复

最佳答案

字典是理想的选择(如果您希望在列表元素之间进行精确的字符串比较),因为它们是保留顺序的。

proc uniques {theList} {
    set d {} 
    foreach item $theList {dict incr d $item}
    return [dict keys $d]
}

然后我们可以这样做:

set newvariable [uniques $variable]

关于sorting - 按照以下模式获取列表的唯一元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30322900/

相关文章:

hibernate - 如何使用 Hibernate/DB2 按 CLOB 列排序

c++ - C++ 中的这种快速排序实现有什么问题?

linux - 如何仅获取最后一次发送的期望脚本的输出

tcl - 如何安全处理可选参数

regex - TCL Regex 用于匹配 CSV 中的未转义引号

linux - TCL 在 proc 之后调用另一个 proc

bash - 在 expect 脚本中输入 sudo 密码

c# - 使用 LINQ orderby 关键字与 OrderBy 扩展方法的等效排序

algorithm - "sorting an array with only two distinct elements"和quicksort有什么关系

java - 使用 4 个选项对数组进行排序的算法