如何在neo4j中对字符串项排序

ff29svar  于 11个月前  发布在  其他
关注(0)|答案(2)|浏览(111)

我运行了一个带有以下子句的Cypher查询:
按xxx说明排序
其中xxx是一个字符串,就像["Coyote"," Eastern Coyote"]一样。我希望它以第一个字母ASC排序,就像这样:[" Eastern Coyote","Coyote"]。但结果仍然是这样:["Coyote"," Eastern Coyote"]
仅供参考:我问了chatgpt,它说neo4j的顺序取决于字母表的unicode,但它仍然没有意义,因为“E”比“C”大。

sr4lhrrt

sr4lhrrt1#

您可以在下面的示例中对列表中的项目进行排序:
1.使用UNWIND和COLLECT

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"]│
└────────────────────────────┘

lc8prwob

lc8prwob2#

在你的问题中,你犯了一些重大错误:

  1. ["Coyote"," Eastern Coyote"]是字符串的列表,而不是字符串。
  2. ORDER BY xxx DESC降序排序,而不是升序。
    1.你说:
    .仍然没有意义,因为“E”比“C”大
    但是字符串“Eastern Coyote”实际上以空格字符开头,所以你应该已经将““与“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

相关问题