TC官方合作论坛

 找回密码
 立即注册
查看: 2205|回复: 18
打印 上一主题 下一主题

[源码分享] 2.006功能强大了很多,准备全面转向2.006版本。另发起开源基础函数运动!!!详情入内

[复制链接]
跳转到指定楼层
楼主
发表于 2011-12-26 17:23:38 | 只看该作者 回帖奖励 |正序浏览 |阅读模式

马上加入TC

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

x
一个语言只所有为什么好用,用的人多,其中有两部分:
第一部分是:语言平台本身强大
第二部分是:基于些平台的开源基函数强大
所以,为了TC语方更好用,更强大。更多的提高大家的编码效率,本人向所有高手们发发起开源运动呼吁,把你们的珍藏的基础工具函数拿出来吧。让大家共享吧。
列表代码:


  1. //用数组实现在列表,模似2.03中变量队列的功能,可保存随意个元素
  2. namespace 列表

  3. //一个多行二列的数组,第一列为id,第二列为数据
  4. int[][] date

  5. //当前列表中有多少个元素
  6. int size

  7. //当前数组的长度
  8. int length

  9. //每次扩大值
  10. int growth

  11. //多线程同步标识
  12. bool isinit

  13. //初始化数组与数组长度,初始大小为100
  14. function bool 初始化(int 初始大小,int 扩张值)
  15. if( isinit == false)
  16. length = 初始大小
  17. date = int[length][2]

  18. growth = 扩张值

  19. isinit = true
  20. endif

  21. return true
  22. endfunction

  23. //销毁列表
  24. function bool 销毁()
  25. if( isinit == true )
  26. date = int[1][2]
  27. length = 0
  28. growth = 0
  29. size = 0
  30. isinit = false
  31. endif

  32. return true
  33. endfunction

  34. //增加一个元素到列表中,id为编号,value为值,不能是0做为id值
  35. //true为增加成功,false为增加失败
  36. //如果id重复,会将原有值进行覆盖
  37. function bool 增加元素(int id,int value)
  38. if( id == 0 )
  39. return false
  40. endif

  41. //列表已满
  42. if( size >= length )
  43. 列表.扩张数组()
  44. endif

  45. //循环数组,查看是否存在空位,如果有空位,则将数据放入
  46. int i = 0
  47. while(i < length)
  48. //如果查找到为0,则表示此位没有被使用
  49. if( date[i][0] == 0 )
  50. date[i][0] = id
  51. date[i][1] = value

  52. size = size + 1
  53. break
  54. endif

  55. i = i + 1
  56. endwhile

  57. return true
  58. endfunction

  59. //根据编号删除元素
  60. //成功返回true 失败返回false
  61. function bool 删除元素(int id)
  62. int i = 0
  63. while(i < length)
  64. if( date[i][0] == id)
  65. date[i][0] = 0
  66. date[i][1] = 0

  67. size = size - 1

  68. return true
  69. endif

  70. i = i + 1
  71. endwhile

  72. return false
  73. endfunction

  74. //查看编号是否已存在
  75. //true表示已存在 false表示不存在
  76. function bool 编号是否存在(int id)
  77. int i = 0
  78. while(i < length)
  79. if( date[i][0] == id )
  80. return true
  81. endif

  82. i = i + 1
  83. endwhile

  84. return false
  85. endfunction

  86. //查看此值是否在列表中已存
  87. //不能判度0值是否存在
  88. function bool 值是否存在(int value)
  89. int i = 0
  90. while(i < length)
  91. if( date[i][1] == value )
  92. return true
  93. endif

  94. i = i + 1
  95. endwhile

  96. endfunction

  97. //根据编号取出列表中的元素
  98. //成功,返回指定的值。失败返回-2147483647,约定此值为失败
  99. function int 取出元素(int id)
  100. if( 列表.编号是否存在(id) == false)
  101. return -2147483647
  102. endif

  103. int i = 0
  104. while(i < length)
  105. if( date[i][0] == id )
  106. return date[i][1]
  107. endif

  108. i = i + 1
  109. endwhile

  110. endfunction

  111. //得到当前列表元数个数
  112. function int 列表元素个数()
  113. return size
  114. endfunction

  115. //得到当前列表的大小
  116. function int 列表大小()
  117. return length
  118. endfunction

  119. //这个函数可以得到所有id值,返回一个int类型数组
  120. //返回数组的0下标值为数组的长度
  121. function int[] 得到所有编号()
  122. int[] ids = int[size + 1]
  123. ids[0] = size

  124. int i = 0,j = 1
  125. while( i < length)
  126. if(date[i][0] != 0)
  127. ids[j] = date[i][0]
  128. j = j + 1
  129. endif
  130. i = i + 1
  131. endwhile

  132. return ids
  133. endfunction

  134. //这个函数可以得到所有值,返回一个int类型数组
  135. //返回数组的0下标值为数组的长度
  136. function int[] 得到所有值()
  137. int[] values = int[size + 1]
  138. values[0] = size

  139. int i = 0,j = 1
  140. while( i < length)
  141. if(date[i][0] != 0)
  142. values[j] = date[i][1]
  143. endif

  144. i = i + 1
  145. endwhile

  146. return values
  147. endfunction

  148. //此函数为内部函数
  149. function bool 扩张数组()
  150. //定义新的数组,比原数组大扩张值
  151. int[][] temp = int[length + growth][2]

  152. //将原数组中的数据拷贝到新数组中
  153. int i = 0
  154. while(i < length)
  155. temp[i][0] = date[i][0]
  156. temp[i][1] = date[i][1]
  157. i = i + 1
  158. endwhile

  159. //将原数组替换成新数组
  160. date = temp
  161. //长度修改为扩张后的长度
  162. length = length + growth

  163. return true
  164. endfunction

  165. endnamespace
复制代码
测试代码
  1. #include "列表.t"

  2. namespace 工具
  3. //定义默认空间

  4. function bool start_click()
  5. 列表.初始化(10,10)
  6. //string id,value
  7. //repeat(11)
  8. // help.inputbox("id","id",id)
  9. // help.inputbox("value","value",value)
  10. // help.sleep(100)
  11. //
  12. // 列表.增加元素(convert.strtoint(id,0),convert.strtoint(value,0))
  13. //endrepeat

  14. //先加10个元素
  15. 列表.增加元素(1,1)
  16. 列表.增加元素(2,2)
  17. 列表.增加元素(3,3)
  18. 列表.增加元素(4,4)
  19. 列表.增加元素(5,5)
  20. 列表.增加元素(6,6)
  21. 列表.增加元素(7,7)
  22. 列表.增加元素(8,8)
  23. 列表.增加元素(9,9)
  24. 列表.增加元素(10,10)

  25. //打出列表大小和元数个数
  26. help.messagebox("列表大小是:" + convert.inttostr(列表.列表大小()))
  27. help.messagebox("列表元素个数是:" + convert.inttostr(列表.列表元素个数()))

  28. //多加一个,打出列表大小和元素个数
  29. 列表.增加元素(11,11)

  30. help.messagebox("增加一个元素后列表大小是:" + convert.inttostr(列表.列表大小()))
  31. help.messagebox("增加一个元素后列表元素个数是:" + convert.inttostr(列表.列表元素个数()))

  32. //取出一个元素
  33. help.messagebox("id:11对应的值为:" + convert.inttostr(列表.取出元素(11)))

  34. //判断元素是否存在
  35. if( 列表.编号是否存在(1) )
  36. help.messagebox("编号1存在")
  37. endif
  38. if( 列表.值是否存在(1) )
  39. help.messagebox("值1存在")
  40. endif
  41. if( 列表.编号是否存在(15) )
  42. help.messagebox("编号15存在")
  43. else
  44. help.messagebox("编号15不存在")
  45. endif
  46. if( 列表.值是否存在(15) )
  47. help.messagebox("值15存在")
  48. else
  49. help.messagebox("值15不存在")
  50. endif

  51. //删除一个元素
  52. 列表.删除元素(1)
  53. help.messagebox("删除一个元素后列表大小是:" + convert.inttostr(列表.列表大小()))
  54. help.messagebox("删除一个元素后元素个数是:" + convert.inttostr(列表.列表元素个数()))

  55. //得到元素的编号数组
  56. help.messagebox("删除后所有编号是")
  57. int[] ids
  58. ids = 列表.得到所有编号()
  59. int i = 0
  60. while( i < ids[0] )
  61. help.messagebox(convert.inttostr(ids[i+1]))
  62. i = i + 1
  63. endwhile

  64. help.messagebox("增加一个元素100,这个元素将会在第一位置")
  65. //再加一个元素
  66. 列表.增加元素(100,100)
  67. //得到元素的编号数组
  68. ids = 列表.得到所有编号()
  69. i = 0
  70. while( i < ids[0] )
  71. help.messagebox(convert.inttostr(ids[i+1]))
  72. i = i + 1
  73. endwhile

  74. 列表.销毁()

  75. return true
  76. //函数返回语句
  77. endfunction

  78. function bool exit_click()
  79. //这里添加你要执行的代码
  80. help.exit()

  81. return true
  82. //函数返回语句
  83. endfunction

  84. endnamespace
  85. //空间结束语句
复制代码
本人最近想研究脚本日志模块,有想一起研究的朋友到18群找寒心月,就是我。
回复

使用道具 举报

19#
 楼主| 发表于 2011-12-30 14:05:35 | 只看该作者
[quote][quote]接着楼上补充下:
还应该有个索引数组,可以定义为 int[ ] index
传进来编号no时,先看看 index[no]的值是什么,1代表int数组,2代表string数组,3代表。。。。等等
这个数组用来维护数据的存放以及索引
我就喜欢呵呵呵 发表于 2011-12-28 9:48:27 [url=http://
我就喜欢呵呵呵 发表于 2011-12-30 10:53:49

暂时还没有想做,要死脑细胞的。以后用到再做。呵呵
回复 支持 反对

使用道具 举报

18#
发表于 2011-12-30 13:25:57 | 只看该作者
回复 4楼全世界失眠的帖子

我要拜您为师!不知道收不收?低调的华丽
回复 支持 反对

使用道具 举报

17#
发表于 2011-12-30 10:53:49 | 只看该作者
[quote]接着楼上补充下:
还应该有个索引数组,可以定义为 int[ ] index
传进来编号no时,先看看 index[no]的值是什么,1代表int数组,2代表string数组,3代表。。。。等等
这个数组用来维护数据的存放以及索引
我就喜欢呵呵呵 发表于 2011-12-28 9:48:27 [url=http://bbs.tcm
zzx198461 发表于 2011-12-29 12:33:33


恩,对的,你也可以自己将传进来的参数进行判断,做出来后功能就强大了,现在TC没有结构的概念,有些类型混杂的复合数据传递起来特麻烦,要是有这样的数组,可以直接丢数组里,传递就行了,期待您做出来了~

回复 支持 反对

使用道具 举报

16#
 楼主| 发表于 2011-12-29 12:33:33 | 只看该作者
接着楼上补充下:
还应该有个索引数组,可以定义为 int[ ] index
传进来编号no时,先看看 index[no]的值是什么,1代表int数组,2代表string数组,3代表。。。。等等
这个数组用来维护数据的存放以及索引
我就喜欢呵呵呵 发表于 2011-12-28 9:48:27

基本上明白你要做什么了。我现在列表可不限定长度,如果要做到不限定类型。也是可以的。先做一个索引数组,索引数组是一个多行三列的数组,第一列为编号,第二列为类型,第三列为值存放的位置。在列表中会有多个类型的数组,int string bool类型。在增加时,首先判断传入的类型,然后再将值放到对应的数组中。再把位置记录下来,放入索引数组中。理论上是可行的,不过有点麻烦了。个人觉得,做一个字符串类型的列表,或者也能搞定这个事情,因为字符串可以表示任意数据。在多写几个转换函数。
回复 支持 反对

使用道具 举报

15#
发表于 2011-12-28 09:48:27 | 只看该作者
接着楼上补充下:
还应该有个索引数组,可以定义为 int[ ] index
传进来编号no时,先看看 index[no]的值是什么,1代表int数组,2代表string数组,3代表。。。。等等
这个数组用来维护数据的存放以及索引
回复 支持 反对

使用道具 举报

14#
发表于 2011-12-28 09:35:33 | 只看该作者
[quote]恩,思路比较普遍,经典~
将int数组改为string数组的话,更实用,比如编号 "1",内容  “ 撒旦法撒旦法”,这样好用多了
提供给用户的接口,比如编号,还是int型,内容为string型,
可以改改,就是多了些数据转换的工作,加油~
赞个:strong:

我就喜欢呵呵呵 发表于 2011-12-26 23:38
zzx198461 发表于 2011-12-27 13:28:08

没看懂我的意思,他是不支持重载,我们也没必要写重载,你可以这样
function int MyList(int no,string content)
在这里判断content是什么类型的,tc自带的判断类型函数可以用用,
根据类型,将传进来的content分配到对应的数组里
也就是说  我们会有好几个类型不同的数组,
编号怎么对应的,可以自己想办法,最简单的就是,比如编号2,是string,那么就在string数组的编号为1的位置上写入content
编号5,int  那就在int数组的编号为4的地方写入content
这样可能比较耗空间,不过也耗不了多少,你喜欢也可以再进行优化
然后这样需要我们返回的就是好几个数组了
建议就是用全局数组,这样可以不用返回,用户直接调用
缺点在于你只能有固定数目的列表,因为全局参数在运行前就确定了,在运行时无法改变
重载功能跟工作人员说过了,暂时不会开放~
加油哦,多写些出来,拿来就可以用,真好,嘿嘿~

endfunction
回复 支持 反对

使用道具 举报

13#
发表于 2011-12-28 03:34:37 | 只看该作者
好家伙   顶顶顶
回复 支持 反对

使用道具 举报

12#
 楼主| 发表于 2011-12-27 13:28:08 | 只看该作者
恩,思路比较普遍,经典~
将int数组改为string数组的话,更实用,比如编号 "1",内容  “ 撒旦法撒旦法”,这样好用多了
提供给用户的接口,比如编号,还是int型,内容为string型,
可以改改,就是多了些数据转换的工作,加油~
赞个:strong:

我就喜欢呵呵呵 发表于 2011-12-26 23:38:26

TC的数组好像不支持 int型 与 string混用的吧,要是有重载就好了,可以再写一个string[][]类型的。思路都差不多。
回复 支持 反对

使用道具 举报

11#
发表于 2011-12-27 12:35:13 | 只看该作者
小白飘过  表示看不懂
回复 支持 反对

使用道具 举报

*滑动验证:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

站长推荐上一条 /2 下一条

关闭

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

GMT+8, 2025-10-26 20:21 , Processed in 0.237046 second(s), 26 queries .

Powered by 海安天坑软件科技有限公司

© 2001-2013 Comsenz Inc.

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