YYW'S BLOG

知识的分享就是知识的获得
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

Q 语言初学者系列:(3)Lists 初级

Posted on 2008-07-27 15:55  阿武  阅读(1653)  评论(0编辑  收藏  举报

      声明:本系列文章全部参考自官方教程,由于缺乏中文资料而且本人E文实在太菜,对于E文较好的朋友可以直接通过下面的链接访问官方网站提供的教程,
欢迎大家一起学习讨论。
hhttps://code.kx.com/trac/wiki/QforMortals2/contents
用户名跟密码为anonymous

Overview
      我们都知道,复杂的数据跟数据集数据都是建立在简单的数据类型之上的,在学习Q语言的过程中深入理解列表以及列表的操作是非

常重要的。虽然概念是很简单的,但是很快你就会发现其实并不简单。

Introduction to Lists
      列表是一个简单跟有序的数据集,简单的说,列表里面存储着一序列的有序的基本数据类型数据或者其它数据类型的数据,接下来我们将人简单的基本数据类型列表讲起。

List Definition and Assignment
      一个列表的写法是在一个小括号里面通过分号将各个元素通过分号分隔开,为了可读性,我们通常在每个元素后面敲上一个空格。(事实上,一个简单的数据类型的值我们也可能把它看成是一个只拥有一个元素的列表)
          e.g.
          q)(1;2;3)
          q)("a";"b";"c";"d")
          q)(`Life;`the;`Universe;`and;`Everything)
          q)(-10.0; 3.1415e; 1b; `abc; "z")

      在上面的例子中,前三个都只包含统一的数据类型,但最后一个却不是,它是一个复合类型的列表,另外还可以有内联的统一数据类型的列表跟内联的混合的数据类型列表。另外需要注意事的是 (1; 2) 跟 (2; 1) 是两个不同的列表,也就是说列表并不是无序的。
      我们还可以将列表赋值给一个变量,写法跟声明变量并赋值没什么两样。
          e.g.
          q)L1:(1;2;3)
          q)L2:("a";"b";"c";"d")
          q)L3:(`Life;`the;`Universe;`and;`Everything)
          q)L4:(0b;1b;0b;1b;1b;0b)
          q)L5:(-10.0;3.1415e;1b;`abc;"z")

      甚至我们还可以这样子写:

          q)L:100 200 300                                             / 一个int类型列表
          q)H:1 2 255h                                                  / 一个short类型列表
          q)F:123.4567 9876.543 99.99                          / 一个float类型列表
          q)bits:01011b                                                 / 一个boolean类型列表
          q)bytes:0x20a1ff                                             / 一个byte类型列表
          q)symbols:`Life`the`Universe`and`Everything   / 一个symbol类型列表
          q)chars:"so long"                                             / 一个char类型列表


count

      通过count方法可以获取一个列表所包含的元素的数量。有关Functions的内容将在下一节讲到。

          e.g.
          q)L1:(1; 2; 3)
          q)count L1
          3

Empty List

      有的时候我们想创建一个不包括任何元素的列表的时候怎么办?其实很简单,只是不往小括号里面添加元素就行了。
         e.g.
         q)L:( )

         q)count L

         0

      以接下来的章节我们还会讲到如何去创建一个指定类型的空列表。

Indexing

      访问一个列表元素的时候我们可以通过索引,跟大多数语言一样,索引通常都是从 0 开始的,Q 语言也不例外,一个包含了 n 个元素的列表,它的有效索引就是 0 到 n-1。 下面的例子将演示了如何通过索引去获取列表里的一个元素:

         e.g.

         q)L:(-10.0;3.1415e;1b;`abc;"z")
         q)L[0]
         -10f
         q)L[1]
         3.1415e
         q)L[2]
         1b
         q)L[3]
         `abc
         q)L[4]
         "z"
         q)L[5]
         0n

      如果索引超过了有效范围,那么将会返回一个空值:

         e.g.
         q)L[5]
         0n

      当索引值为null的时候,将会返回所有的元素:
         e.g.
         q)L[]
         -10f
         3.1415e
         1b
         `abc
         "z"

      在语法上我们可以使用::来表示null,所以L[]跟L[::]结果一样。

      同样我们也可以通过索引给列表中的某一个元素重新赋值,需要注意一点,对于简单列表,也就是具有统一数据类型的列表我们赋值的时候只能是给它赋上同样类型的数据。

         e.g.
         q)L1:1 2 3
         q)L1[2]:42
         q)L1
         1 2 42
         q)L1[2]:`other       / 只能是int类型的数据
         'type


      我们也可以通过现有的列表来创建新的列表。

         e.g.
         q)L1:(1;2;100 200)
         q)L2:(1 2 3;`ab`c)
         q)L3:(L1;L2)
         q)L3
         (1;2;100 200)
         (1 2 3;`ab`c)

 

     关于列表的内容就先写到这里,将它定为初级篇,因为以上的内容只要是使用过数组的朋友都还是比较容易理解和应用的,接下来会有一篇文章继续对List做更深入的讲解。敬请期待。