neo4j 中字符串项目的顺序如何

问题描述 投票:0回答:2

我使用以下子句运行了 Cypher 查询:

按 xxx 描述订购

其中

xxx
是一个字符串,如
["Coyote"," Eastern Coyote"]
。我希望它以第一个字母 ASC 排序,如下所示:
[" Eastern Coyote","Coyote"]
。 但结果还是这样:
["Coyote"," Eastern Coyote"]
.

仅供参考:我问过chatgpt,它说neo4j中的顺序取决于字母表的unicode,但这仍然没有意义,因为“E”比“C”大

neo4j cypher
2个回答
0
投票

您可以在以下示例中对列表中的项目进行排序:

  1. 使用展开和收集
    WITH  [ "Coyote"," Eastern Coyote"]  as lst
    UNWIND lst as l
    WITH l ORDER by l
    RETURN  collect(l) as sorted_lst
  1. 使用apoc函数排序
    WITH  [ "Coyote"," Eastern Coyote"]  as lst
    RETURN apoc.coll.sort(lst) as sorted_lst

结果:

╒════════════════════════════╕
│"sorted_lst"                │
╞════════════════════════════╡
│[" Eastern Coyote","Coyote"]│
└────────────────────────────┘

0
投票

你犯了几个重大错误:

  1. ["Coyote"," Eastern Coyote"]
    是字符串的列表,而不是字符串。

  2. ORDER BY xxx DESC
    降序 顺序排序,而不是升序。

  3. 你说:

    ...仍然没有意义,因为“E”比“C”大

    但是字符串“Eastern Coyote”以 space 字符开头,因此您应该将“”与“C”进行比较。 “ ”字符的词汇值低于“C”。因此,按

    降序
    顺序对列表项进行排序后,["Coyote"," Eastern Coyote"] 就是正确答案。

您需要仔细检查字符串值以删除无关的空格。

此外,要以

升序 
顺序(默认顺序)返回 xxx 中的字符串列表,您可以使用以下代码片段:

...
UNWIND xxx AS y
WITH y ORDER BY y
RETURN COLLECT(y) AS result

或者,如果您确实想按 降序 顺序返回列表:

...
UNWIND xxx AS y
WITH y ORDER BY y DESC
RETURN COLLECT(y) AS result
© www.soinside.com 2019 - 2024. All rights reserved.