如何对列表进行排序,如果列表元素重复,请在tcl中添加与该元素关联的值

如何对列表进行排序,如果列表元素重复,请在tcl中添加与该元素关联的值,tcl,Tcl,我的文本文件包含: Inputs for graph - 0 32 1 0 2 38 3 0 4 74 5 0 6 78 1 47 2 84 我试图读取此文件并存储在另一个文件中,但经过修改后,如果第一个元素自身重复,则添加与这些元素关联的值并存储为一个元素 Desired output - 0 32 1 47 2 122 3 0 4 74 5 0 6 78 有人能给我指点迷津吗?我是通过tcl代码来实现的。假设您的输入和输出都是行文件,每行包含两个简单的整数,其中第一个是键,第二个是值,

我的文本文件包含:

Inputs for graph -
0 32
1 0
2 38
3 0
4 74
5 0
6 78
1 47
2 84
我试图读取此文件并存储在另一个文件中,但经过修改后,如果第一个元素自身重复,则添加与这些元素关联的值并存储为一个元素

Desired output -

0 32
1 47
2 122
3 0
4 74
5 0
6 78

有人能给我指点迷津吗?我是通过tcl代码来实现的。

假设您的输入和输出都是行文件,每行包含两个简单的整数,其中第一个是键,第二个是值,您可以非常轻松地实现这一点

set data {}

# Read in standard pattern
set f [open "input.txt"]
set rawdata [read $f]
close $f

# For each line...
foreach line [split $rawdata "\n"] {
    if {[string trim $line] eq ""} continue; # skip blank lines, just in case
    # Split the line into variables
    lassign $line key value
    # Accumulate, adding up the values for each key
    dict incr data $key $value
}

# Sort the result by the keys, type-punning the dict to a list
set data [lsort -stride 2 -index 0 -integer $data]

# Write the data back out
set f [open "output.txt" "w"]
foreach {key value} $data {
    puts $f "$key $value"
}
close $f

你也有那些标题行吗?没有一种通用的方法来处理它们。如果使用
-index 1
,则将按累计总数排序。
-stride
选项需要8.6或更高版本。非常感谢您,先生!!甚至我也创建了一个dict,并在解析每一行时附加dict。但我从未遇到过stride关键字,所以非常感谢。