问题描述
比方说,我有一个值为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