列表

Cypher® 包含对列表的全面支持。

有关检查列表成员资格的列表谓词运算符 IN 的信息,请参见 表达式 → 谓词 → 列表运算符。有关列表连接(+||)、列表元素访问和切片([])以及列表和模式推导式的信息,请参见 列表表达式

一般列表

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

查询
RETURN [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] AS list
表 1. 结果
列表

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

行数: 1

列表可以包含不同类型的值。

查询
RETURN [0, "hello", 3.14, null] AS list
表 2. 结果
列表

[0, "hello", 3.14, null]

行数: 1

在 Cypher 中,列表的索引从 0 开始。要访问列表中的单个元素,请使用方括号。这会从起始索引开始提取,但不包括结束索引。

例如

查询
WITH [5,1,7] AS list
RETURN list[2]
表 3. 结果
list[2]

7

行数: 1

列表范围和大小

以下示例使用 range 函数来创建列表。此函数返回一个包含给定起始和结束数字之间所有数字的列表。该范围在两端都是包含的。

查询
RETURN range(0, 10)[3] AS element
表 4. 结果
元素

3

行数: 1

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

查询
RETURN range(0, 10)[-3] AS element
表 5. 结果
元素

8

行数: 1

最后,可以在方括号内使用范围来返回列表的范围。列表范围运算符([])包含起始值,但不包含结束值。

查询
RETURN range(0, 10)[0..3] AS list
表 6. 结果
列表

[0,1,2]

行数: 1

查询
RETURN range(0, 10)[0..-5] AS list
表 7. 结果
列表

[0,1,2,3,4,5]

行数: 1

查询
RETURN range(0, 10)[-5..] AS list
表 8. 结果
列表

[6,7,8,9,10]

行数: 1

查询
RETURN range(0, 10)[..4] AS list
表 9. 结果
列表

[0,1,2,3]

行数: 1

超出边界的切片会被简单截断,但超出边界的单个元素将返回 null

查询
RETURN range(0, 10)[15] AS list
表 10. 结果
列表

<null>

行数: 1

查询
RETURN range(0, 10)[5..15] AS list
表 11. 结果
列表

[5,6,7,8,9,10]

行数: 1

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

查询
RETURN size(range(0, 10)[0..3]) AS list
表 12. 结果
列表

3

行数: 1

将列表存储为属性

可以将同构的简单值列表存储为属性。

允许 - 将同构列表存储为属性
CREATE (n:Label)
SET n.listProperty = [1, 2, 3]
RETURN n.listProperty AS homogenousListProperty
表 13. 结果
homogenousListProperty

[1, 2, 3]

行数: 1

但是,不可能将异构列表存储为属性。

不允许 - 将异构列表存储为属性
CREATE (n:Label)
SET n.listProperty = [1, "hello", .45, date()]
RETURN n.listProperty AS heterogenousListProperty
错误
Neo4j only supports a subset of Cypher types for storage as singleton or array properties. Please refer to section cypher/syntax/values of the manual for more details.
© . All rights reserved.