TC官方合作论坛

 找回密码
 立即注册
查看: 29008|回复: 113

[问题] 大家一起学TC(五:数组内容随机重新排列)[附代码精简过程]

  [复制链接]
发表于 2015-5-6 03:12:20 | 显示全部楼层 |阅读模式

马上加入TC

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
本帖最后由 zxjkings 于 2015-5-6 12:29 编辑

{:soso_e129:}今天半夜群里朋友问A数组的内容放到B数组里,并且要打乱顺序重新排列怎么搞

想来很简单的应该,结果上手才发现悲剧了,用数组[下标]的形式产生各种错误.
如下:
  1. 变量 A=array(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16),B=array()
  2.     遍历(变量 i=0; i<16; i++)
  3.         变量 随机位置=随机数(0,数组大小(A))
  4.         B[i]=A[随机位置]
  5.         数组指定位置删除(A,随机位置)
  6.     结束
  7.     traceprint(B)
复制代码

想来才发现----------5.0的数组[]中取的是Key

这NM就蛋疼了,于是想到用数组获取元素来取,也是各种错误.

至于错误原因,以及尝试的次数,我就不蛋疼的复述过程了,反正是被5.0数组虐的不行.
  1. 变量 A=array(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16),B=array(),i=0,随机位置,值,key,ret
  2.     循环(真)
  3.         如果(数组大小(A)==0)
  4.             跳出
  5.         否则
  6.             随机位置=随机数(0,数组大小(A)-1)
  7.             数组获取元素(A,随机位置,值,key)
  8.             B[i]=值
  9.             数组指定位置删除(A,随机位置)
  10.             i++
  11.         结束
  12.     结束
  13.     traceprint(B)
复制代码
调试无误发给群里朋友,刚一发完就后悔了.

为啥后悔?

太坑人了,循环只是为了之前蛋疼的思路,写着写着留下的渣渣,本来完全没必要,只要遍历就行了.于是又改了一份:
  1. 变量 A=array("a","b","c","d","e","f","g"),B=array(),随机位置,值,key,ret,次数=数组大小(A)
  2.     遍历(变量 i = 0; i <次数;  i++)
  3.         随机位置=随机数(0,数组大小(A)-1)
  4.         数组获取元素(A,随机位置,值,key)
  5.         B[i]=值
  6.         数组指定位置删除(A,随机位置)
  7.     结束
  8.     traceprint(B)
复制代码
是的,只有7行(不算调试输出那行).但群里各种半夜不睡的屌丝朋友们鸡冻了!说7行太长.

接下来这7行代码遭受各种惨无人道的**.

我是懵B了,这7行代码硬是被减到了......

{:soso_e129:}直接回帖看的答案的都是1厘米的小唧唧,为了提高也好,学习也罢,解闷也无所谓..
请把你精简之后的代码来代替回复,看你能不能更"短"...
(注:封装函数无效)

游客,如果您要查看本帖隐藏内容请回复


评分

参与人数 1威望 +10 金币 +10 收起 理由
sam7894604 + 10 + 10 感谢抛砖引玉。

查看全部评分

回复

使用道具 举报

发表于 2015-5-6 07:06:52 | 显示全部楼层
本帖最后由 sam7894604 于 2015-5-6 07:47 编辑

我也来看看~


------------------------------研究与分享的分隔线------------------------------


首先...你的代码有BUG,会有重复的值,下面是修复过的。

  1.     变量 A = 数组("a","b","c","d","e","f","g"),B = 数组(),key,次数 = 数组大小(A)
  2.     遍历(变量 i = 0; i <次数; i++)
  3.         数组获取元素(A,key = 随机数(0,数组大小(A)-1),B[i])
  4.         数组指定位置删除(A,key)
  5.     结束
复制代码



再来呢,分享我精简过的四行代码版,还去除一个多余 次数 变量,完美无BUG。

  1.     变量 A = 数组("a","b","c","d","e","f","g"),B = 数组(),key
  2.     遍历(变量 i = 数组大小(A) - 1 ; 数组获取元素(A,key = 随机数(0,i),B[i]) && i > 0; i--)
  3.         数组指定位置删除(A,key)
  4.     结束
复制代码


还有终极版,三行代码版,完美无BUG。

  1.     变量 A = 数组("a","b","c","d","e","f","g"),B = 数组(),key
  2.     遍历(变量 i = 数组大小(A) - 1 ; 数组获取元素(A,key = 随机数(0,i),B[i]) && 数组指定位置删除(A,key) && i > 0; i--)
  3.     结束
复制代码


我的精简版都是倒序写入,但是实际使用上不影响,所以你要求的功能可以说是完整实现了。

评分

参与人数 2威望 +1 金币 +11 收起 理由
Demono + 1 + 1 简化得出神入化,对新手来说看着就不好理解.
zxjkings + 10 艹 你也太狠了!!!

查看全部评分

回复 支持 2 反对 0

使用道具 举报

发表于 2015-5-6 06:13:12 | 显示全部楼层
看看怎么回事
回复 支持 反对

使用道具 举报

发表于 2015-5-6 08:03:39 | 显示全部楼层
回复

使用道具 举报

发表于 2015-5-6 08:27:22 | 显示全部楼层
936571194
回复

使用道具 举报

发表于 2015-5-6 08:31:02 | 显示全部楼层
回复

使用道具 举报

发表于 2015-5-6 08:32:00 | 显示全部楼层
xfvbgdvds
回复

使用道具 举报

发表于 2015-5-6 08:43:19 | 显示全部楼层
看看效果,什么东西
回复 支持 反对

使用道具 举报

发表于 2015-5-6 09:06:38 | 显示全部楼层
回复

使用道具 举报

发表于 2015-5-6 09:09:02 | 显示全部楼层
看看1厘米的小唧唧,
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

推荐上一条 /2 下一条

关闭

小黑屋|TC官方合作论坛 (苏ICP备18045623号)

GMT+8, 2024-4-16 23:17 , Processed in 0.041255 second(s), 25 queries .

Powered by 海安简单软件服务部

© 2008-2019 版权所有 保留所有权利

快速回复 返回顶部 返回列表