当前位置: 代码迷 >> PB >> 数组转字符串有关问题
  详细解决方案

数组转字符串有关问题

热度:194   发布时间:2016-04-29 09:23:06.0
数组转字符串问题
有一个下标50000的数组,要把这个数组的内容写入一个字符串中

目前用

for i = 1 to upperbound(ls_a[])

ls_b = ls_b + ls_a[i]

next

但是灰常灰常慢,应该是ls_b越来越长导致的吧?

有好点办法么?



------解决方案--------------------
分两个循环做,当然具体内循环和外循环各多少,自己试一下.

这个是因为,内存管上,一个字符串会预先设定一定的空间长度,当实际的长度超过这个预设值,内存管理的部份就必须重新申请内存,并把原来的复制过去,再销毁原来的内存
//想想看,让你自己写一个字符串的类,你也只能这么做.
当这个内存块变大时,对它的申请,复制的操作就会变慢.而且不是线性增长的.(内存颠簸)
一些语言对一些内存操作有关的类,允许用户事先估算要用到多少,比如我知道一会加起来会超过1M,可以事先锁定它。但PB不行。

-------------------------
//你的做法是,它是"12:48:44,12:49:25",41秒

string ls_1
time ltd_1
long i
for i = 1 to 50000
ls_1 = ls_1 + '1111111111'
next
messagebox('',string(ldt_1) + "," + string(now()))

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

//下面这个是"12:52:10,12:52:15",5秒
string ls_1,ls_2
time ldt_1
long i,j
ldt_1 = now()
for j = 1 to 50
for i = 1 to 1000
ls_2 = ls_2 + '1111111111'
next
ls_1 = ls_1 + ls_2
ls_2 = ''
next
messagebox('',string(ldt_1) + "," + string(now()))
  相关解决方案