Сумма между элементами массива и создание нового массива на языке Cypher

Мне нужно суммировать элемент массива с предыдущим элементом и создать новый массив с этими элементами. Теперь вручную я использую этот код:

match (a:User) 
with collect(a.capital) as cap 
with cap as cap, length(cap) as len
return cap[0], 
       cap[0]+cap[1], 
       cap[0]+cap[1]+cap[2],
       cap[0]+cap[1]+cap[2]+cap[3], 
       cap[0]+cap[1]+cap[2]+cap[3]+cap[4], 
       cap[0]+cap[1]+cap[2]+cap[3]+cap[4]+cap[5], 
       cap[0]+cap[1]+cap[2]+cap[3]+cap[4]+cap[5]+cap[6], 
       len

Но мне нужно использовать запрос Cypher, который выполняет эту операцию с массивами разной длины.

Структурированный массив Numpy
Структурированный массив Numpy
Однако в реальных проектах я чаще всего имею дело со списками, состоящими из нескольких типов данных. Как мы можем использовать массивы numpy, чтобы...
T - 1Bits: Генерация последовательного массива
T - 1Bits: Генерация последовательного массива
По мере того, как мы пишем все больше кода, мы привыкаем к определенным способам действий. То тут, то там мы находим код, который заставляет нас...
Что такое деструктуризация массива в JavaScript?
Что такое деструктуризация массива в JavaScript?
Деструктуризация позволяет распаковывать значения из массивов и добавлять их в отдельные переменные.
1
0
78
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Cypher имеет функцию reduce:

WITH [12,28,74,45] AS cap
RETURN reduce(x = 0, v IN cap | x + v)
// 159

Вы также можете использовать Функции сбора APOC:

WITH [12,28,74,45] AS cap
RETURN apoc.coll.sum(cap)
// 159.0

Обновить

WITH [12,28,74,45] AS cap
UNWIND range(1, size(cap)) AS i
WITH apoc.coll.sum(cap[0..i-1])
     + apoc.coll.sum(cap[0..i]) AS sum
RETURN collect(sum)

Результат :

╒═══════════════════════╕
│"collect(sum)"         │
╞═══════════════════════╡
│[12.0,52.0,154.0,273.0]│
└───────────────────────┘

Следуя вашему примеру, мне нужен новый массив с [12,12 + 28,12 + 28 + 74,12 + 28 + 74 + 45]

raf 08.11.2018 14:15

Спасибо, я пробовал таким образом в своей БД, и он работает:

   WITH [12,28,74,45] AS cap
   UNWIND range(1, size(cap)) AS i
   WITH apoc.coll.sum(cap[0..i]) AS sum
   RETURN collect(sum)

Другие вопросы по теме