语法-列表

Neo
Neo
2022-03-20 / 0 评论 / 72 阅读

本节内容源自Cypher官方手册V4.4版,笔者对其进行学习、翻译、记录。

一般列表

通过使用方括号并用逗号分隔列表中的元素来创建列表。

RETURN [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] AS list

在示例中,您使用该range函数。它为您提供了一个列表,其中包含给定开始数字和结束数字之间的所有数字。范围包括两端。

要访问列表中的单个元素,您可以再次使用方括号。这从开始索引中提取,直到但不包括结束索引。

RETURN range(0, 10)[3]
3

您也可以使用负数,从列表的末尾开始。

RETURN range(0, 10)[-3]
8

最后,您可以使用括号内的范围来返回列表的范围。

RETURN range(0, 10)[0..3]
[0,1,2]
RETURN range(0, 10)[0..-5]
[0,1,2,3,4,5]
RETURN range(0, 10)[-5..]
[6,7,8,9,10]

超出范围的切片被简单地截断,但超出范围的单个元素返回null。

RETURN range(0, 10)[15]
<null>
RETURN range(0, 10)[5..15]
[5,6,7,8,9,10]

您可以按如下方式获取列表size:

RETURN size(range(0, 10)[0..3])
3

列表理解

列表理解是 Cypher 中可用的一种语法结构,用于基于现有列表创建列表。它遵循数学集合构建符号(集合理解)的形式,而不是使用映射和过滤函数。

RETURN [x IN range(0,10) WHERE x % 2 = 0 | x^3 ] AS result
[0.0,8.0,64.0,216.0,512.0,1000.0]

如果您只想过滤或映射,则可以省略部分表达式。

RETURN [x IN range(0,10) WHERE x % 2 = 0 ] AS result
[0,2,4,6,8,10]
RETURN [x IN range(0,10) | x^3 ] AS result
[0.0,1.0,8.0,27.0,64.0,125.0,216.0,343.0,512.0,729.0,1000.0]

模式理解

模式理解是 Cypher 中可用的一种语法结构,用于根据模式匹配创建列表。模式理解匹配指定的模式,就像普通MATCH子句一样,谓词就像普通WHERE子句一样,但会产生指定的自定义投影。

下图用于模式理解示例:

image.png

此示例返回一个包含电影发行年份的列表。模式理解中的模式匹配在Matrix电影标题中查找节点a(具有名称Keanu Reeves的Person节点)与电影有关系。

MATCH (a:Person {name: 'Keanu Reeves'})
RETURN [(a)-->(b:Movie) WHERE b.title CONTAINS 'Matrix' | b.released] AS years
[2021,2003,2003,1999]
MATCH (a:Person {name: 'Keanu Reeves'})
WITH [(a)-->(b:Movie) | b.released] AS years
UNWIND years AS year
WITH year ORDER BY year
RETURN COLLECT(year) AS sorted_years
[1995,1997,1999,2000,2003,2003,2003,2021]