lua学习之table类型

关系表类型,这是一个很强大的类型。我们可以把这个类型看作是一个数组。只是 C语言的数组,只能用正整数来作索引; 在Lua中,你可以用任意类型的来作数组的索引,但这个值不能是 nil。同样,在C语言中,数组的内容只允许一种类型;在 Lua中,你也可以用任意类型的值来作数组的内容,nil也可以。

基本介绍

注意三点: 
    第一,所有元素之间,总是用逗号 "," 隔开;
    第二,所有索引值都需要用 "["和"]" 括起来;如果是字符串,还可以去掉引号和中括号; 即如果没有[]括起,则认为是字符串索引
    第三,如果不写索引,则索引就会被认为是数字,并按顺序自动从 1往后编;

例如:

tt = {"hello" ,33}

value = 4

tab = {[tt] = "table",key = value, ["flag" ] = nil, 11}

print(tab[tt])

print(tab.key)

print(tab[])

以上写法都是对的。http://hovertree.com/hovertreescj/

look = {[www] = "ok"}这样是不对的,www没有赋值,所以默认为nil因此出错table index is nil

---

temp = 1

tab = {[temp] = 1, 11}

print(tab[temp]) --此时的结果是11,因为11没有显式对应的key,因此从1开始,如果前面定义了,则覆盖其value

---

temp = 2

tab = {[temp] = 1, 11}

temp = 1

print(tab[temp]) -- 结果是11,虽然定义时[temp] = 1,但是后来我们改变了temp的值,所以指向另外的key了

以上可知:

1.对于字符串,在{}定义时,可以key = value, 也可以["flag"] = nil,索引都是string类型,对于非nil类型变量(包括字符串),都可以[variable]=value的方式

2.使用table时,对于字符串,可以通过.的方式访问,也可以通过[]方式访问。tab[a],tab[b],只要a==b那么tab[a]可以访问到tab[b]的值

3.不管定义索引时用的是常量还是变量,最终table中value的索引key是常量,不会随变量的改变而变化该value的key

嵌套

tb11= {tb12 = {bool = true}} -- simple, it‘s a table IN a table :)

-- Call magic!

print(tb11.tb12.bool ) -- works fine, since it‘s calling the key and value correctly.

print(tab11["tb12" ].bool ) --same as line 33

print(tab11.tb12 ["bool"]) --same as line 33

print(tab11["tb12" ]["bool"]) --same as line 33

修改table的value

--Altering a table‘s content. Basically manipulating the values of the keys.

lucky= {john="chips" ,jane ="lemonade",jolene="egg salad" }

lucky.jolene = "fruit salad" --changed the value to "fruit salad" instead of "egg salad"

lucky.jerry = "fagaso food" -- adding a new key-value pair to the container lucky.

lucky.john = nil -- remove john from giving anything or from being a key.

table的易变性

= {}; b = a;

print(== b)  --> true

c,= {},{};

print(== d) -->false

table库函数使用

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

1. table.sort (table [, comp])

Sorts table elements in a given order, in-place, from table[1] to table[n], where n is the length of the table. If comp is given, then it must be a function that receives two table elements, and returns true when the first is less than the second (so that not comp(a[i+1],a[i]) will be true after the sort). If comp is not given, then the standard Lua operator < is used instead.

The sort algorithm is not stable; that is, elements considered equal by the given order may have their relative positions changed by the sort.

name = {"you" ,"me", "him","bill" }

--table.sort - only works with arrays!

table.sort(name)

for k, v in ipairs( name) do

print( k,v)

end

--table.sort uses callbacks. a function that is writtent to be called by a library function.

function cmp( a, b)

if string.sub(a,,2) < string.sub(b,,2) then

return true

else

return false

end

end

table.sort(name, cmp)

for k, v in ipairs( name) do

print( k,v)

end

2. table.insert (table, [pos,] value)

Inserts element value at position pos in table, shifting up other elements to open space, if necessary. The default value for pos is n+1, where n is the length of the table so that a call table.insert(t,x) inserts x at the end of table t.

 

--table.insert --an easy to copy a table to another table or adding elements to an array.!

foo = {"a" ,"c", "d"}

bar = {}

function printt( table)

for i=,#table do

print(i,table [])

end

end

print("before insert:" )

printt(foo)

table.insert(foo,,"b")

print("after insert" )

printt(foo)

3.  table.concat (table [, sep [, i [, j]]])

 

Given an array where all elements are strings or numbers, returns table[i]..sep..table[i+1] ··· sep..table[j]. The default value for sep is the empty string, the default for i is 1, and the default for j is the length of the table. If i is greater than j, returns the empty string. 

 

--table.concat does what it implies. Takes an array and concates to one string.

num = {,2, 3,4,,6}

print(table.concat (num ,"<"))

4. table.remove (table [, pos])

Removes from table the element at position pos, shifting down other elements to close the space, if necessary. Returns the value of the removed element. The default value for pos is n, where n is the length of the table, so that a call table.remove(t) removes the last element of table t.

 

abc = {"a" ,"b", "c"}

print(table.remove (abc ,2))

print("abc length = " .. #abc)

 

 

5. table.maxn (table)

Returns the largest positive numerical index of the given table, or zero if the table has no positive numerical indices. (To do its job this function does a linear traversal of the whole table.)

--table.maxn

apple = {"a" ,"p",[ 5]="e"}

print(table.maxn (apple )) -- 5

duck = {[-]=3,[- 1]=0}

print(table.maxn (duck )) -- 0

 

 

面向对象编程

 

--note for a object to work, it needs a closure(inner function with an upvalue(a local value from a higher scope))
--note: the more closures made, the slower the program would run.

function mg1( n)

local function get ()

return n ;

end

local function inc ()

= n +;

end

return {get = get, inc= inc}

end

object = mg1(50 )

print(object.get ())

print(object["get" ]())

object.inc()

print(object.get ())

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

do

local function get ()

return o.one

end

local function inc (self , two )

self.one = self.one + two

end

function mg3 (one )

return {one = one , get = get , inc = inc }

end

end

= mg3(50 )

a:get()

a.inc(a,)

print(a:get())

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

do

local T = {};

function T:get()

return self.n ;

end

function T:inc(m)

self.n = self.n + m ;

end

function mg4 ( n )

return {= n , get =T.get , inc =T.inc }

end

end

= mg4(30 )

print(c:get())

c:inc()

print(c:get())

推荐:http://www.cnblogs.com/roucheng/p/lua1.html

时间: 2024-08-04 06:12:31

lua学习之table类型的相关文章

Lua学习笔记-table

本来打算3天将lua学完,无奈lua语法实在有点难记,所以还是好记性不如烂笔头,记录一下学习内容. 首先介绍一下lua的table,这是一个key-value型映射,可以动态增长.功能十分强大,并且lua只提供这一种容器.这也是为啥经常忘记的原因,因为仔细学起来有很多东西需要思考.对于有C或者C++基础的,可以看一下源码,这里有一篇博客写的很好lua数据结构之table的内部实现 1. table之数组 这里的数组就是最简单的用整数来索引的,不过下标从1开始 1 table={1,2,3,4}

lua学习之table

学习lua, table是一个相当重要的数据结构.这里记录下table相关内容. 关系表类型,这是一个很强大的类型.我们可以把这个类型看作是一个数组.只是 C语言的数组,只能用正整数来作索引: 在Lua中,你可以用任意类型的值来作数组的索引,但这个值不能是 nil.同样,在C语言中,数组的内容只允许一种类型:在 Lua中,你也可以用任意类型的值来作数组的内容,nil也可以. 基本介绍 注意三点:  第一,所有元素之间,总是用逗号 "," 隔开: 第二,所有索引值都需要用 "[

lua学习之类型与值篇

类型与值 lua 是动态类型的语言 在语言中没有类型定义的语法 每个值都携带有它的类型信息 8种基础类型 用 type 可以返回这个值的类型的名称 将一个变量用于不同类型,通常会导致混乱的代码 但合理使用,如异常情况下返回 nil ,以区别正常情况下的其他类型的返回值 变量没有预定义的类型,任何变量都可以包含任何类型的值 print(type("Hello")) --string print(type(666)) --number a = print print(type(a)) --

Lua学习——table

table类型实现了“关联数组”.“关联数组”是一种具有特殊索引方式的数组.不仅可以通过证书来索引它,还可以使用字符串或其他类型(除了nil)来索引它.table是Lua中主要的数据结构机制(事实也是仅有的),具有强大的功能.基于table可以以一种简单.统一和高效的方式来表示普通数组.符号表.集合.记录.队列和其他数据结构. table的特性: table是一个“关联数组”,数组的索引可以是数字或者是字符串 table 的默认初始索引一般以 1 开始 table 的变量只是一个地址引用,对 t

lua学习——类型与值

Lua是动态类型语言,变量不要类型定义 lua中有8个基本类型:nil,boolean,number,string,      userdata,function,thread,table 用函数type可以测试给定变量或者值的类型 1.nil nil类型只有一个值,那就是nil.一个全局变量没有被赋值以前默认为nil,给全局变量赋值nil可以删除该变量 2.boolean 取值false,true,lua中所有值都可以作为条件,在控制结构中,除false,nil为假,其他为真 如:0和空串都是

lua中打印所以类型功能实现table嵌套table

lua中打印所以类型功能实现 本人测试 number.string.bool.nil.table嵌套table.userdata没问题 共享一下有什么问题请拍砖 代码如下 cclog = function( ... ) local tv = "\n" local xn = 0 local function tvlinet(xn) -- body for i=1,xn do tv = tv.."\t" end end local function printTab(i

Lua中table类型的源码实现

  1.概述 table是lua中唯一的表示数据结构的工具.它可以用于实现数据容器.函数环境(Env).元表(metatable).模块(module)和注册表(registery)等其他各种用途.因此了解table的实现是非常有必要的,根据<Lua中数据类型的源码实现>中知道,在Lua中,table是由结构体体Table来实现的.下面将以Lua 5.2.1的源码来看table的实现.   2.实现原理 在Lua5.0以后,table是以一种混合型数据结构来实现的,它包含一个哈希表部分和一个数

(原创) cocos2d-x 3.0+ lua 学习和工作(4) : 公共函数(5): 返回指定表格中的所有键(key):table.keys

这里的函数主要用来做:返回指定表格中所有的键.参考资料为quick_cocos. 星月倾心贡献~~~ --[[ -- 返回指定表格中的所有键(key) -- example: local t = ( a = 1, b = 2, c = 3 ) local keys = table.keys( t ) -- keys = { "a", "b", "c" } -- @param t 要检查的表格(t表示是table) -- @param table

(原创) cocos2d-x 3.0+ lua 学习和工作(4) : 公共函数(7): 其他table方法

看了下其他的table方法,好像没有什么好说的,注释里已经写的很明白了,这里就不罗嗦了~(小白:懒...).参考资料为quick_cocos. 星月倾心贡献~~~ --[[ -- 返回指定表格中的所有值(value) -- example local t = { a = 1, b = 2, c = 3 } local values = table.values( t ) -- values = { 1, 2, 3 } -- @parame t 要检查的表格(t表示是table) -- @para