forcal 发表于 2011-11-22 11:55

Lu系统扩展动态库LuSystem之结构

详细参考:http://www.forcal.net/sysm/lu1/luhtm/lusystem.htm

    结构(struct)是一个线性表,可以存放若干任意的Lu数据。结构成员必须以#开头。结构成员的存储顺序与其定义顺序不一定相同。

    (1)新建结构:相当于结构定义!!!using("sys");
new.o[];    //用函数new生成结构,有3个成员,其中“姓名”成员进行了初始化。函数o用于输出 结构。用函数struct生成结构更为方便:!!!using("sys");
struct[#num, #姓名 : "luuu", #年龄].o[];        //用函数new生成结构,有3个成员,其中“姓名”成员进行了初始化。函数o用于输出 结构。(2)复制结构:相当于生成结构对象!!!using("sys");
main(:a)= a=struct[#num, #姓名 : "luuu", #年龄], o;结果:struct{#num : nil , #姓名 : luuu , #年龄 : nil}
struct{#num : nil , #姓名 : luuu , #年龄 : nil}
struct{#num : 22 , #姓名 : luuu , #年龄 : 33}(3)设置结构:批量对结构成员赋值,注意次序是任意的,并且可设置部分成员或全部成员!!!using("sys");
main(:a)= a=struct[#num, #姓名, #年龄], o, a.set(#年龄:33, #num:22).o["\r\n"];结果:struct{#num : nil , #姓名 : nil , #年龄 : nil}
struct{#num : 22 , #姓名 : nil , #年龄 : 33}(4)结构成员单独赋值,获取结构成员的值!!!using("sys");
main(:a)= a=struct[#num, #姓名, #年龄], a.#姓名="王强", a.#年龄=33, a.#num=22, o;结果:struct{#num : 22 , #姓名 : 王强 , #年龄 : 33}
王强
33(5)结构嵌套!!!using("sys");
main(:a)= a=struct[#num, #班级], a.#num=22, a.#班级=struct[#num, #姓名, #年龄],
  a.#班级.#num=88,
  a.#班级.#姓名="王强",
  a.#班级.#年龄=33,
  o;结果:struct{#num : 22 , #班级 : struct[...]}
22
struct{#num : 88 , #姓名 : 王强 , #年龄 : 33}
88
王强
33(6)效率测试!!!using("sys");
main(:a,i,t0,sum)=
  a=struct{
    #January,
    #February,
    #March,
    #April,
    #May,
    #June,
    #July,
    #August,
    #September,
    #October,
    #November,
    #December
  },
  t0=clock(), sum=0,
  i=0, while{++i<=100000,
    a.#January=1,
    a.#February=2,
    a.#March=3,
    a.#April=4,
    a.#May=5,
    a.#June=6,
    a.#July=7,
    a.#August=8,
    a.#September=9,
    a.#October=10,
    a.#November=11,
    a.#December=12,
    sum=sum+a.#January+a.#February+a.#March+a.#April+a.#May+a.#June+a.#July+a.#August+a.#September+a.#October+a.#November+a.#December
  },
  o{"\r\n耗时", /1000., "秒。sum=", sum, "\r\n"};结果:耗时0.75秒。sum=7800000Matlab2009a代码:a=struct('January',1,'Febrary',2,'March',3,'April',4,'May',5,'June',6,'July',7,'August',8,'September',9,'October',10,'November',11,'December',12);
tic;
sum=0;
for i=1:100000
    a.January=1;
    a.February=2;
    a.March=3;
    a.April=4;
    a.May=5;
    a.June=6;
    a.July=7;
    a.August=8;
    a.September=9;
    a.October=10;
    a.November=11;
    a.December=12;
    sum=sum+a.January+a.February+a.March+a.April+a.May+a.June+a.July+a.August+a.September+a.October+a.November+a.December;
end
toc,
sum结果:Elapsed time is 3.275743 seconds.

sum =

7800000

forcal 发表于 2011-11-22 20:37

测试2:

Lu代码:!!!using("sys");
main(:a,i,t0,sum)=
  t0=clock(), sum=0,
  i=0, while{++i<=100000,
    a=struct{#January:1, #February:2, #March:3, #April:4, #May:5, #June:6, #July:7, #August:8, #September:9, #October:10, #November:11, #December:12},
    sum=sum+a.#January+a.#February+a.#March+a.#April+a.#May+a.#June+a.#July+a.#August+a.#September+a.#October+a.#November+a.#December
  },
  o{"\r\n耗时", /1000., "秒。sum=", sum, "\r\n"};结果:耗时0.53100000000000003秒。sum=7800000Matlab2009a代码:tic;
sum=0;
for i=1:100000
    a=struct('January',1,'February',2,'March',3,'April',4,'May',5,'June',6,'July',7,'August',8,'September',9,'October',10,'November',11,'December',12);
    sum=sum+a.January+a.February+a.March+a.April+a.May+a.June+a.July+a.August+a.September+a.October+a.November+a.December;
end
toc,
sum结果:Elapsed time is 6.390977 seconds.

sum =

     7800000
页: [1]
查看完整版本: Lu系统扩展动态库LuSystem之结构