gpt4 book ai didi

tcl - 按预定义列表中的值对 TCL 列表进行排序

转载 作者:行者123 更新时间:2023-12-04 11:02:08 28 4
gpt4 key购买 nike

在 C# 中实际上存在一个问题,所以希望有人能给我 TCL 解决方案。 Sort a List based on a Pre-Sorted List

我有一个已经排序的列表。说,我的排序列表是

{"Junior Developer" "Developer" "Senior Developer" "Project Lead"}

现在,我想按照与上面列表相同的顺序对上面列表的任何子集进行排序。也就是说,如果我有作为输入
{"Developer" "Junior Developer"}

我希望输出为
{"Junior Developer" "Developer"}

如果输入是
{"Project Lead" "Junior Developer" "Developer"}

然后我希望输出为
{"Junior Developer" "Developer" "Project Lead"}

我看到了 lsort有一个 -command选项,但阅读了很多评论说它没有很好的性能,所以想知道是否有另一种方法可以使用 dict以保持秩序。

最佳答案

您可以使用 lsearch将索引放入排序列表,然后将它们用作整理键:

set orderList {"Junior Developer" "Developer" "Senior Developer" "Project Lead"}
set original {"Developer" "Junior Developer"}

set keyed [lmap value $original {list $value [lsearch -exact $orderList $value]}]
set sortedKeyed [lsort -index 1 -integer $keyed]
set sorted [lmap value $sortedKeyed {lindex $value 0}]

puts "$original -> $sorted"
# "Developer" "Junior Developer" -> {Junior Developer} Developer

不建议在输出中使用双引号将值括起来;它不是规范的列表引用样式(并且很难强制 Tcl 这样做;在执行用户可见的输出时,存在通常无关紧要的邪恶边缘情况)。

您可以改为使用 -indices选项 lsort以避免必须构建所有这些元组。
set orderList {"Junior Developer" "Developer" "Senior Developer" "Project Lead"}
set original {"Developer" "Junior Developer"}

set indexes [lmap value $original {lsearch -exact $orderList $value}]
set sortedIndexes [lsort -indices -integer $indexes]
set sorted [lmap idx $sortedIndexes {lindex $original $idx}]

puts "$original -> $sorted"
# "Developer" "Junior Developer" -> {Junior Developer} Developer

您可以使用 foreach而不是 lmap ,但代码要冗长得多。

关于tcl - 按预定义列表中的值对 TCL 列表进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58736077/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com