为什么这个函数在某些情况下有效,而在另一些情况下无效?

我正在尝试编写一个函数,使 set r 具有对称关系(例如,如果它有 2,1 但没有 1,2,则应添加 1,2)。我已经通过 seeding,在大多数情况下它可以正常工作,但在某些情况下会失效,无法添加应该添加的所有对,而看起来没有任何规律。

我已经检查了程序使用的其他函数,它们似乎都正常工作,因此我把问题缩小到只有一个函数无法工作,但我无法弄清楚原因。

- 这两个字典提供了初始 set r。
    r={
     ['ac']=true,
     ['ba']=true,
     ['cd']=true,
     ['ad']=true,
     ['bd']=true,
     ['aa']=true,
     ['ca']=true,
     }
 let={
      ['a']=1,
      ['b']=2,
      ['c']=3,
      ['d']=4
 }

r 最初的输出如下所示: (1,3) (2,1) (3,4) (1,4) (2,4) (3,1) (1,1)


- 这个函数以 set r 作为参数,并检查逆序对的键(例如,如果它有一个 'ad' 键但没有 'da',则应添加它,然后返回一个现在具有对称关系的 r。

    function make_symmetric (tab)
        for k in pairs(tab) do
            if not tab[string.sub(k,2,2)..string.sub(k,1,1)] then
               tab[string.sub(k,2,2)..string.sub(k,1,1)]=true
            end
        end
        return tab
     end

然后,r 的输出如下所示: (4,3) (3,1) (1,2) (1,1) (1,3) (1,4) (2,4) (2,1) (3,4)


正如您所看到的,它没有像应该那样添加 (4,2) 和 (4,1) 以使集合对称,但成功地添加了其他元素。

提前感谢!

点赞