LUA 关于取出两个table中不同元素的算法。

LUA 关于取出两个table中不同元素的算法。,第1张

我理解下你的意思

你是要把 T_letter_tbl 中所有元素的 letter标签和  和 hope_letter_tbl 中的元素比较,如果 发现重复 的 则删除 T_letter_tbl 中的 重复标签吗?

一般做法用 lua 做这种很容易,但是要注意方法,不是比较,那样遍历比较 效率太低。先把 需要比较的 table 的元素作为 索引 建立一个 hash

直接取元素 进行 标签判断,

下面是一个演示:tableprint 自定义的输出,可以删去,自己选择输出方式

 

function tableprint ( tbl, name )

    name = name or "table"

    local prompt = '  '

    local i = 1

    local printed = {}

    local function tostring2 ( var )

        if (type( var) == "string" ) then

               return '"' var '"'

        end

       

        return tostring(var )

    end

    local function itor ( t , i )

        printed[ tostring( t)] = true;

        for key , ele in pairs (t ) do

            if not (type( ele) == "table" ) then

                print( string format('%s[%s] = %s;' , stringrep( prompt, i ), tostring2 ( key ),tostring2 (ele )) )

            elseif printed [tostring( ele)] then

                print( string format('%s[%s] = %s;' , stringrep( prompt, i ), tostring2 ( key ),tostring2 (ele )) )

            else

                print( string format('%s[%s] = {' , stringrep( prompt, i ), tostring2 ( key )) )

                i = i + 1

                itor( ele, i)

                i = i - 1

                print( string format('%s};' , stringrep( prompt, i )) )

            end

        end

    end

 

    print( stringformat( "%s = {" , name ) )

    itor( tbl, i)

    print("};" )

end

-----------------------------------------------------

tbl_letter_HOPE = {

    [1] = "bbbbbb";

    [2] = "ffffff";

    [3] = "cccccc";

    [4] = "xxxxxx";

    [5] = "eeeeee";

};

tbl_letter_T = {

    [1] = {["letter"] = "Y"};

    [2] = {["letter"] = "M"};

    [3] = {["letter"] = "P"};

    [4] = {["letter"] = "K"};

    [5] = {["letter"] = "bbbbbb"};

    [6] = {["letter"] = "R"};

    [7] = {["letter"] = "Q"};

    [8] = {["letter"] = "xxxxxx"};

    [9] = {["letter"] = "L"};

    [10] = {["letter"] = "D"};

    [11] = {["letter"] = "B"};

    [12] = {["letter"] = "ffffff"};

    [13] = {["letter"] = "Z"};

    [14] = {["letter"] = "T"};

    [15] = {["letter"] = "["};

    [16] = {["letter"] = "cccccc"};

    [17] = {["letter"] = "E"};

    [18] = {["letter"] = "C"};

    [19] = {["letter"] = "W"};

    [20] = {["letter"] = "I"};

    [21] = {["letter"] = "F"};

    [22] = {["letter"] = "eeeeee"};

    [23] = {["letter"] = "O"};

    [24] = {["letter"] = "X"};

    [25] = {["letter"] = "U"};

    [26] = {["letter"] = "S"};

};

--- 根据 tbl_letter_HOPE 中的元素 去除 tbl_letter_T 中的元素

-- 

local function main ()

    local tbl_erase = {}

    for key, ele in pairs(tbl_letter_HOPE) do

       -- 不考虑 元素权重则 改为  = true

        tbl_erase[tostring(ele)] = (tbl_erase[tostring(ele)] or 0) + 1 

    end

    

    

    for key, ele in pairs(tbl_letter_T) do

        if tbl_erase[eleletter] then

            -- 移除 整行 [12] = {["letter"] = "ffffff"};

            tbl_letter_T[key] = nil

            

            -- 还是 一个标签 letter

            --tbl_letter_T[key]letter = nil

        end

    end

    tableprint(tbl_letter_T)

end

startTime = ostime()

main()

print( stringformat(">> This function cost: %s ms", tostring(ostime()-startTime) ) )

如果只想 获得去除给定元素后的 table

可以先 复制原 tbl_letter_T

注意:

不要用 浅复制 你之前 那个代码 可能 就是 希望做一个 tbl_letter_T 的副本

但是 使用 浅复制 相当于仅复制了指向table的句柄。

tbl_Interim = tbl_letter_T   -- 2个变量指向同一个 table表

要用

for key, ele in pairs(tbl_letter_T) do

 tbl_Interim [key] = ele

end

这种方法和上次给你说的不一样,现在你不需要指定 input 和 td 的 id,只需要 table 有个 id 就可以。JS 会寻找 table 内所有的 input,然后赋值给 td。唯一要保证的是你的 table 结构要和例子中的保持一致。使用传统的 Javascript 确实很费时间,因为现在有各种 Javascript 框架,应用起来比较方便,省时。建议你在基本掌握 Javascript 后学习一下,推荐 jQuery。

<script type="text/javascript">

function assignValues() {

// 设置 table id

var table_id = 'st';

// 获取 table 元素

var table = documentgetElementById(table_id);

// 获取 table 内的全部 input

var textinputs = tablegetElementsByTagName('input');

// 循环

for(var i = 0; i < textinputslength; i++) {

// 将 textinput 的值置于 textinput 上一级 td 节点的下一个同级 td 节点中

textinputs[i]parentNodenextSiblinginnerHTML = textinputs[i]value;

}

};

</script>

<table>

例子中你给出的table

</table>

<input type="button" value="赋值" onclick="assignValues();" />

一般这种取值你可以给INPUT加上一个自定义属性如

(''+'

');

去的时候直接是

$("input[tdindex='3']")eq(0)val();

//

tdindex属性就是自定义的属性,可任意取,这边可以理解成第3列的input元素。

1、JS获取表格的简便方法:获取tbody:tBodies 获取thead:tHead 获取tfoot:tFoot 获取行tr:rows 获取列td:cells

使用实例: oTabletBodies[0] oTabletHead[0] oTabletFoot[0] oTablerows[1] oTablecells[1]

2、遍历

var oTable=documentgetElementById("表格id");

oTabletBodies[0]可以看成是rows和cells组成的二维数组,用两个for循环嵌套遍历一下就可以了

以上就是关于LUA 关于取出两个table中不同元素的算法。全部的内容,包括:LUA 关于取出两个table中不同元素的算法。、怎样取得table中td里面全部input 的值,到td 中. 新提问、jquery获取table里INPUT的值等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/10128509.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-05
下一篇2023-05-05

发表评论

登录后才能评论

评论列表(0条)

    保存