chapter11_3 字符串缓冲

时间:2022-10-31 00:09:22

  逐行地读取一个文件,典型的代码是:

local buff= " "
for line in io.lines() do
buff = buff .. line .. "\n"
end

这段代码看似可以正常工作,但是如果面对较大的文件时,性能开销极大。

Lua提供了io.read("*a")选项,这样可以一次性读取整个文件。

在Lua中,可以将一个table作为字符串缓冲。关键是使用函数table.concat,它将给定列表中的所有字符串连接起来,并返回结果。

用concat来重写上述循环:

local t = {}
for line in io.lines() do
t[#t + ] = line .. "\n"
end
local s = table.concat(t)

之前的代码处理350k的文件需要1分钟,而这个实现只需花小于0.5秒的时间。

concat函数还有第二个可选的参数,可以指定一个插在字符串间的分隔符,有了这个分隔符,就不必在每行后插入一个“\n”了。

local t = {}
for line in io.lines() do
t[#t + ] = line
end
s = table.concat(t,"\n") .. "\n" --需要在最后的结尾添加一个"\n"

上面的最后一行需要复制整个结果字符串,而这时的字符串也已经相当长了。

没有直接的选项让concat插入这个额外的分隔符,不过可以“欺骗”concat,只需要在t后面添加一个空字符串:

local t = {}
for line in io.lines() do
t[#t + ] = line
end
t[#t + ] = "" --用空字符串 欺骗concat
s = table.concat(t,"\n")

concat在空字符串前插入了这个额外的换行符,位于结果字符串的末尾。

chapter11_3 字符串缓冲的更多相关文章

  1. 字符串流stringstream(头文件sstream)

    今天看到一样很有趣的东西,可以用于各种类型的转换.其实一个文本可以看作一个长长的字符串,整数啊浮点数的都是字符串,于是在字符串流里面就可以很方便地玩转各种类型,比如说: #include<ios ...

  2. 大家一起和snailren学java-&lpar;13&rpar;字符串

    “好久没有写这个系列了.其实也有在看,不过觉得一些很基本的都写上来没意思.现在打算的是将整本书看完后,最后整合为一篇blog,筛选出一些平时没有注意到的或者更深入的理解” 在写程序中,字符串Strin ...

  3. 获取字符串中每个字符出现的次数&lpar;利用TreeMap&rpar;

    案例:"aababcabcdabcde",获取字符串中每一个字母出现的次数要求结果:a(5)b(4)c(3)d(2)e(1)分析1:定义一个字符串(可以改进为键盘录入)2:定义一个 ...

  4. Java String字符串&sol;&equals;&equals;和equals区别&comma;str。toCharAt&lpar;&rpar;&comma;getBytes&comma;indexOf过滤存在字符,trim&lpar;&rpar;&sol;String与StringBuffer多线程安全&sol;StringBuilder单线程—— 14&period;0

    课程概要 String 字符串 String字符串常用方法 StringBuffer StringBuilder String字符串: 1.实例化String对象 直接赋值  String str=& ...

  5. Python基础:序列(字符串)

    一.概述 字符串 类似于C中的字符数组(功能上更像C++中的string),它是由一个个 字符 组成的序列.与C/C++不同的是,Python中没有 字符 这个类型,而是用 长度为1的字符串 来表示字 ...

  6. Python核心编程--学习笔记--6--序列(上)字符串

    本章研究Python中的序列:字符串.列表和元组.因为这些类型其实都是由一些成员共同组成的一个序列整体,所以我们把它们统称为序列.序列的存储结构可以表示为: 1 序列 序列类型有着相同的访问模式:按下 ...

  7. Python:字符串

    一.序列的概念 序列是容器类型,顾名思义,可以想象,“成员”们站成了有序的队列,我们从0开始进行对每个成员进行标记,0,1,2,3,...,这样,便可以通过下标访问序列的一个或几个成员,就像C语言中的 ...

  8. 【3】python核心编程 第六章-序列:字符串、列表和元组

    1.序列类型操作符 序列操作符 作用 seq[ind] 获得下标为ind 的元素 seq[ind1:ind2] 获得下标从ind1 到ind2 间的元素集合 seq * expr 序列重复expr 次 ...

  9. Java 字符串比较&comma;String 中的一些方法 &equals;&equals; 和 equals 的详解

    "==" 是比较的是两个对象的内存地址,而equals方法默认情况下是比较两个对象的内存地址. 1.String str = "hello"  生成的字符串,首 ...

随机推荐

  1. zencart分类页产品页去掉url中的id号

    最近公司新上的网站被seo指出要修改url,去掉url中产品id.由于我们用的是zencart框架,装了 Ultimate SEO URLs 插件,所以在网上应该有这方面的资料,本文主要参考资料: 原 ...

  2. Error&colon;&lpar;12&rpar; No resource identifier found for attribute &&num;39&semi;titles&&num;39&semi; in package &&num;39&semi;com&period;itheima52&period;mobilesafe5

    http://*.com/questions/5819369/error-no-resource-identifier-found-for-attribute-adsize-i ...

  3. HTTPS的学习

    HTTPS的学习总结   HTTPS学习总结 简述 HTTPS对比HTTP就多了一个安全层SSL/TLS,具体就是验证服务端的证书和对内容进行加密. 先来看看HTTP和HTTPS的区别 我用AFN访问 ...

  4. Activiti-02-activiti api

    流程引擎API和服务 通过ProcessEngine你可以获取各种服务,它和所有的服务对象都是线程安全的,因此整个整个应用中可以只有一份. ProcessEngine processEngine =P ...

  5. Scikit-learn:分类classification

    http://blog.csdn.net/pipisorry/article/details/53034340 支持向量机SVM分类 svm分类有多种不同的算法.SVM是非常流行的机器学习算法,主要用 ...

  6. 科学计算库Numpy(1)

    Numpy 一,数据结构 数据类型: ndarray import numpy world_alchol = numpy.genfromtxt('world_alchol.txt',delimiter ...

  7. Vim 简明教程【转载】

    简明 Vim 练级攻略 第一级 – 存活 安装 vim 启动 vim 什么也别干!请先阅读 当你安装好一个编辑器后,你一定会想在其中输入点什么东西,然后看看这个编辑器是什么样子.但vim不是这样的,请 ...

  8. intoj

    192.168.0.6:1024 emm....我太健忘了...

  9. lower&lowbar;bound &amp&semi;&amp&semi; upper&lowbar;bound

     用lower_bound进行二分查找 ●在从小到大排好序的基本类型数组上进行二分查找. 这是二分查找的一种版本,试图在已排序的[first,last)中寻找元素value.如果[first,last ...

  10. &lbrack;leetcode&rsqb;21&period; Merge Two Sorted Lists合并两个链表

    Merge two sorted linked lists and return it as a new list. The new list should be made by splicing t ...