这两个函数能不能简化或者优化。
lua吧
全部回复
仅看楼主
level 7
xh3140 楼主
笔记本屏幕小,只能分3张截图了。可以看行号。
2016年12月21日 11点12分 1
level 7
xh3140 楼主
来银辣,粗事啦。[笑眼]
2016年12月21日 11点12分 3
fastcall:@MC灵柩猎手 @Lua大神 @Lua大虾
2016年12月21日 11点12分
level 7
xh3140 楼主
2016年12月21日 11点12分 4
level 12
[哈哈]看来这里好像没啥活人了。
2016年12月22日 12点12分 5
level 11
应该是可以再简化的,因为lua的table本身就是散列表,简化起来很方便。目前有个大概思路,不过手头没电脑,也不好写代码……明天我有空了试试
2016年12月22日 15点12分 6
level 11
大概就是可以用递归,lua支持闭包,简直就是神器啊!可以用个变量先保存当前访问的表,然后作为参数hash传递给递归调用。当然每递归一次变参...就去掉最头一个参数。不知道我有没有表达清楚,要是表达清楚了,楼主可以自己试一试[勉强]
2016年12月22日 15点12分 7
这样也没有最大5维这样的限制了,只要栈够,可以任意维……而且lua还支持尾递归,不知道可不可以把上面的思路改成尾递归,那就是真正的任意维了
2016年12月22日 15点12分
level 11
@xh3140 好了,而且还实现了尾递归,真正做到了任意维,只要内存够
不过没用到闭包,昨晚想多了[勉强]
我基本测试了几个,目前没发现什么bug
2016年12月23日 07点12分 8
把函数名改了,因为lua里面本身就有load,害怕引起混淆 而且loadHash函数在出错后会返回nil,而不是单纯地return,】。因为lua没有规定只有return时实际返回的是什么,在别的函数调用loadHash时可能会遇到不可预知的错误,所以我返回nil,使这个函数固定返回一个值
2016年12月23日 07点12分
level 7
xh3140 楼主
@MC灵柩猎手 昨天听你讲了递归后我想了会就明白了,这是我早上写的。但是我有有个简单的问题:我这一次是用表地址,而不是可不参数。但是这个方法会逐步移除地址表中的元素,也就意味着改变了地址表(所有只能用一次,我的测试代码就是每次都重新写地址表,而不是用先设的变量),有什么简单的方法可以解决吗(想多学点。[吐舌])。
2016年12月23日 10点12分 9
level 7
xh3140 楼主
@MC灵柩猎手 我试过重新用变量记录local new_site = site
然后测试代码的地址改为用变量local site = {num,boo,str,tab,fun,use}
但是不行,第一个后的site全部变为了空表。[泪]难道真的要用循环写入每一个元素吗?
2016年12月23日 10点12分 10
lua中所有的table变量都是引用变量,这样赋值也只是把引用赋值过去,新变量指向的还是原来的那个表。所以在lua中clone一个table还是比较麻烦的
2016年12月23日 14点12分
不过就现在的情况而言,你下面的方法完全够用了[开心]
2016年12月23日 14点12分
level 7
xh3140 楼主
应该是这样了。[不高兴]如果相对地址表只能依次写入的话,这样的效率应该是最高的了。
2016年12月23日 12点12分 11
level 1
不要自己实现一个hash表,直接把表转化成字符串。毕竟lua自带的字符串和hash表都很高效
2016年12月25日 13点12分 12
其实我想说,楼主并没有用lua生造一个新的数据结构,用的就是原来的table啊,那两个函数只是可能为了方便统一而弄出来的访问接口罢了。还有,并不是很懂表转换成字符串是什么意思?还有整形?……
2016年12月27日 09点12分
其实我想说,楼主并没有用lua生造一个新的数据结构,用的就是原来的table啊,那两个函数只是可能为了方便统一而弄出来的访问接口罢了。还有,并不是很懂表转换成字符串是什么意思?还有整形?……
2016年12月27日 09点12分
@贴吧用户_0XZKy2W 多维下标直接合并成一个, 最简单方案比如table.concat{x,y,z}. 如果维数不太多,pos = x + BIG * y。BIG是位图最大宽度之类
2016年12月27日 11点12分
回复@金鱼师傅 :原来如此,学到了。不过楼主的要求的哈希表还要是一个关联数组,key可以是除了字符串或整形的任意值,看来层主没有好好看题啊[滑稽]
2016年12月28日 02点12分
level 1
或者转化成整形也可以。lua ruby python之类就别重新发明数据结构了,这活儿是给宿主语言干的,比如C/C++
2016年12月25日 13点12分 13
1