我用在列表中的字符,因爲它們使結果更容易理解。
UNWIND [['a', 'b', 'b', 'c', 'c', 'c'], ['d', 'd', 'd', 'd', 'b', 'b']] as list
WITH list AS list1, list AS list2
UNWIND list2 AS element
WITH list1, element, COUNT(element) AS count
RETURN list1 AS list, COLLECT(element) AS values, COLLECT(count) AS counts
這導致:
╒══════════════════╤═════════╤═════════╕
│list │values │counts │
╞══════════════════╪═════════╪═════════╡
│[a, b, b, c, c, c]│[c, a, b]│[3, 1, 2]│
├──────────────────┼─────────┼─────────┤
│[d, d, d, d, b, b]│[b, d] │[2, 4] │
└──────────────────┴─────────┴─────────┘
答案this question指出
它可能無法動態分配映射鍵
但它提供了一個創建雙元素列表的不錯選擇。使用這種方法,查詢變得這樣:
UNWIND [['a', 'b', 'b', 'c', 'c', 'c'], ['d', 'd', 'd', 'd', 'b', 'b']] as list
WITH list AS list1, list AS list2
UNWIND list2 AS element
WITH list1, element, COUNT(element) AS count
WITH list1 AS list, COLLECT(element) AS values, COLLECT(count) AS counts
RETURN
list,
EXTRACT(i IN RANGE(0, LENGTH(values) - 1) | [values[i], counts[i]]) AS occurrences
這給:
╒══════════════════╤════════════════════════╕
│list │occurrences │
╞══════════════════╪════════════════════════╡
│[a, b, b, c, c, c]│[[c, 3], [a, 1], [b, 2]]│
├──────────────────┼────────────────────────┤
│[d, d, d, d, b, b]│[[b, 2], [d, 4]] │
└──────────────────┴────────────────────────┘
我認爲這已經是足夠優雅。我會接受它。謝謝! –
@JoeyZhang歡迎您。我找到了一種方法來壓縮列表中的另一堆棧溢出的問題,所以請再次檢查我的回答。 –