在Lua中连接各种表

我已经搜索了几天的答案,我设法使用了一个技巧来省略串联部分,只是使用几个单独的循环将不同的值重新插入到同一个表中......但是我的问题是

默认情况下,table.sort使用<比较数组元素,因此它只能对数字数组或字符串数组进行排序。编写一个比较函数,允许table.sort对混合类型的数组进行排序。在排序后的数组中,应将给定类型的所有值分组在一起。在每个这样的组内,数字和字符串应如常排序,其他类型应按任意但一致的方式进行排序。

A = {{},{},{},“”,“a”,“b”,“c”,1,2,3,-100,1.1,function()end,function()end,false,false,true}

如我所说,我使用不同的for循环解决了这个问题,但是否有一种方法可以仅分析表的每个元素,然后将其分配给不同的表???如:“表,函数,号,字符串,...”,然后在分析完成后将它们连接在一起,以便拥有相同的表只是在排序版本中。

我低效的答案是:

函数中的Sep(val) 新的= {}

对于i中的val do 如果type(val [i])==“string” then table.insert(NewA,val [i]) 结束 结束

对于i中的val do 如果type(val [i])==“number” then table.insert(NewA,val [i]) 结束 结束

对于i中的val do 如果type(val [i])==“function” then table.insert(NewA,tostring(val [i])) 结束 结束

对于i中的val do 如果type(val [i])==“table” then table.insert(NewA,tostring(val [i])) 结束 结束

对于i中的val do 如果type(val [i])==“boolean” then table.insert(NewA,tostring(val [i])) 结束 结束

对于i中的NewA do 打印(新的A [i]) 结束

点赞
用户1303277
用户1303277

根据我的理解,您想要首先按类型,然后再按值进行排序:

您可以编写自定义谓词,并将其传递给 sort

-- 由于表无法进行比较,所以需要自定义 < 函数
-- 我想你也可以重载操作符 <
 function my_less (lhs, rhs)
    if (type (lhs) ~= "number" or type (lhs) ~= "string") then
        return tostring (lhs) < tostring (rhs)
    else
        return lhs < rhs;
    end;
 end;

 -- 上述提到的自定义谓词
 function sort_predicate (a,b)
    -- 如果类型相同-比较变量,否则比较类型
    return (type (a) == type (b) and my_less (a, b)) or type (a) < type (b);
 end

 table.sort (A, sort_predicate);
2012-10-09 13:55:43
用户1442917
用户1442917
A = { {}, {}, {}, "", "a", "b", "c", "2", "12", 1, 2, 3, -100, 1.1, 12, 11,
  function() end, function() end, false, false, true }

table.sort(A, function(a,b)
  if type(a) == type(b) and type(a) == 'number' then return a < b end
  return type(a)..tostring(a) < type(b)..tostring(b) end)

将得到以下结果:

{false, false, true, function() end, function() end,
 -100, 1, 1.1, 2, 3, 11, 12, "", "12", "2", "a", "b", "c", {}, {}, {}}
2012-10-09 17:14:32