51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

查看: 3889|回复: 0
打印 上一主题 下一主题

Lua的长字符串合并算法

[复制链接]
  • TA的每日心情
    慵懒
    2015-1-8 08:46
  • 签到天数: 2 天

    连续签到: 1 天

    [LV.1]测试小兵

    跳转到指定楼层
    1#
    发表于 2008-1-10 17:34:58 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    形如:
    -- WARNING: bad code ahead!!
    local buff = ""
    for line in io.lines() do
    buff = buff .. line .. "\n"
    end
    1.每次buff = buff .. line .. "\n",导致新建一块内存,复制原buff内存,销毁原buff内存.
    2.由于GC内存回收机制的的存在使得当字符串为几十k时,程序效率无法接受.
    作如下算法:
    function newStack ()
      return { "" }   -- starts with an empty string
    end
    -- 将每个字符串加入到stack table中
    -- 规定table中的字符串从尾至前为从长度小的字符串到长度长的字符串.
    -- 故,在加入一字符串时,检查其是否长于尾部的字符串,若长于前字符串,与之相加.
    -- 接着再向前判断前方的元素,若相加后的字符串前元素,再如此向前.
    function addString (stack, s)
      table.insert(stack, s)    -- 塞入尾部
      for i=table.getn(stack)-1, 1, -1 do
       if(string.len(stack[i+1])  >  string.len(stack)) then
        stack = stack .. table.remove(stack) -- 移出尾部元素,并相加.
       else
              break
          end
      end
    end
    -- 调用
    local s = newStack()
    for line in io.lines() do
      addString(s, line .. "\n")
    end
    s = toString(s)

    Reference:
    Programming in lua
    分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
    收藏收藏
    回复

    使用道具 举报

    本版积分规则

    关闭

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

    小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

    GMT+8, 2024-11-14 11:01 , Processed in 0.056865 second(s), 25 queries .

    Powered by Discuz! X3.2

    © 2001-2024 Comsenz Inc.

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