惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Google DeepMind News
Google DeepMind News
Stack Overflow Blog
Stack Overflow Blog
Hugging Face - Blog
Hugging Face - Blog
博客园_首页
T
The Blog of Author Tim Ferriss
博客园 - 叶小钗
N
Netflix TechBlog - Medium
腾讯CDC
C
Check Point Blog
P
Proofpoint News Feed
Engineering at Meta
Engineering at Meta
GbyAI
GbyAI
S
SegmentFault 最新的问题
F
Fortinet All Blogs
美团技术团队
U
Unit 42
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
博客园 - 司徒正美
F
Full Disclosure
Recorded Future
Recorded Future
D
DataBreaches.Net
博客园 - 【当耐特】
Martin Fowler
Martin Fowler
J
Java Code Geeks
I
InfoQ
Y
Y Combinator Blog
A
About on SuperTechFans
AI
AI
爱范儿
爱范儿
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
Forbes - Security
Forbes - Security
W
WeLiveSecurity
M
MIT News - Artificial intelligence
雷峰网
雷峰网
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
Simon Willison's Weblog
Simon Willison's Weblog
Schneier on Security
Schneier on Security
The GitHub Blog
The GitHub Blog
Security Archives - TechRepublic
Security Archives - TechRepublic
aimingoo的专栏
aimingoo的专栏
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
G
GRAHAM CLULEY
Know Your Adversary
Know Your Adversary
Latest news
Latest news
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
D
Docker
Recent Commits to openclaw:main
Recent Commits to openclaw:main
量子位
V2EX - 技术
V2EX - 技术
Project Zero
Project Zero

博客园 - 阿武

Moto G 通话没声音 Android 手机技巧 一个Java程序的生死旅程 精妙语录 【Windows Phone 7】【软件发布】深圳通助手 & 深圳长途汽车查询 & 深圳地铁通 [C++ Primer] Passing an array to a function by reference/pointers -- sample 【Ruby】删除旧文件 京东自动抢购机 64位的处理器支持多大的内存? 将.NET Entity Framework 的 Cache模块移植到JAVA平台 做快乐的程序员 KDB+性能分析:内存篇 Q 语言初学者系列:(2)基本数据类型 Q 语言初学者系列:(1)开门篇 熟悉的感觉 盘点自己两年来走过的路 [JAVA]你见过这样的switch吗? - 阿武 - 博客园 网站上图片"另存为" 为什么是 bmp 格式 经实验, 网线两端都接在交换机上并不会烧毁交换机
Q 语言初学者系列:(3)Lists 初级
阿武 · 2008-07-27 · via 博客园 - 阿武

      声明:本系列文章全部参考自官方教程,由于缺乏中文资料而且本人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做更深入的讲解。敬请期待。