1

假设我有一个节点的值是 10 的倍数。我想找到值中的第一个 GAP。这是我在 numpy 中的做法:

 > np.where(np.diff([11,21,31,51,61,71,91]) > 10)[0][0] + 2
 > 4  i.e. 41

我将如何在 Cypher 中执行此操作...?

 match (n) where n.val % 10 = 1
 with n.val
 order by val ....???

我正在使用 RedisGraph。

PS> 如果没有 GAP,它应该返回下一个值,即最大 + 10,如果可能的话!

4

1 回答 1

2

我不确定这是否是最高效的解决方案,但您可以使用collect()和列表推导的组合来完成此操作:

MATCH (n) WHERE n.val % 10 = 1 WITH n.val AS val ORDER BY n.val // collect ordered vals
WITH collect(val) AS vals // combine vals into array
WITH vals, [idx IN range(0, size(vals) + 1) WHERE vals[idx + 1] - vals[idx] > 10] AS gaps // find first index with diff > 10
RETURN vals[gaps[0]] + 10 // return missing value

如果没有找到间隙,要另外返回下一个最大值,请将 RETURN 子句更改为使用 CASE 语句:

RETURN CASE size(gaps) WHEN 0 THEN vals[-1] + 10 ELSE vals[gaps[0]] + 10 END
于 2020-09-08T17:24:03.920 回答