在节点值中找到“ GAP”?还是下一个?

问题描述

比方说,我有一个值为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(如果可能)!

解决方法

我不确定这是否是性能最高的解决方案,但是您可以结合使用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