2017-09-26 6 views

답변

3

우선 CS의 0부터 시작하는 위치는 2입니다.

WITH split ("what is porsche",' ') AS spl 
RETURN [x IN range(0,size(spl)-1) WHERE spl[x] = "porsche"][0] 

반환 2

WITH split ("what is porsche",' ') AS spl 
RETURN [x IN range(0,size(spl)-1) WHERE spl[x] = "is"][0] 

반환 1

+0

방금 ​​한 줄짜리를 사용했습니다. 잘 작동합니다! – ugp

2

Cypher에는 기본적으로 IndexOf-like 기능이 없습니다. 하지만 APOC Procedure를 설치하고이 같은 기능 apoc.coll.indexOf을 사용할 수 있습니다

WITH split ("what is porsche",' ') AS list 
RETURN apoc.coll.indexOf(list, 'porsche') 

이 결과는 다음과 같습니다

╒════════════════════════════════════╕ 
│"apoc.coll.indexOf(list, 'porsche')"│ 
╞════════════════════════════════════╡ 
│2         │ 
└────────────────────────────────────┘ 

참고 : 결과는 2 인덱스가 0

에서 시작하기 때문에

참고 2 : 사용중인 Neo4j의 버전에 따라 APOC 절차를 설치하십시오. version compatibility matrix을 살펴보십시오.

EDIT :

CASEsize(), reduce()range() 기능을 APOC 절차를 사용하여 사용하지 않고 하나 개의 대체 방법 : 인덱스 후 발견되지 않는 경우

WITH split ("what is porsche",' ') AS list 
WITH list, range(0, size(list) - 1) AS indexes 
WITH reduce(acc=-1, index IN indexes | 
    CASE WHEN list[index] = 'porsch' THEN index ELSE acc + 0 END 
) as reduction 
RETURN reduction 

-1 반환 .

+2

나는 또한 지능형리스트 바닐라 사이퍼의 솔루션을 제공하는 작업 만했다 당신이 나를 이길 :

는 하나 라이너 그것에. 큰! –

2

으로 브루노 APOC이에 대한 올바른 전화를하지만,라고 어떤 이유로 당신은 당신이 다음 rigamarole을 통해 갈 수 APOC없이 위치를 ...

WITH split("what is porsche",' ') AS porsche_strings 
UNWIND range(0,size(porsche_strings)-1) AS idx 
WITH CASE 
    WHEN porsche_strings[idx] = 'porsche' THEN idx + 1 
END AS position 
RETURN collect(position) AS positions 
2

이를 구현하기위한 또 다른 방법 발견하기를 원한다면 보통 Cypher :

WITH 'porsche' AS needle, 'what is porsche' AS haystack 
WITH needle, split(haystack, ' ') AS words 
WITH needle, [i IN range(0, length(words)-1) | [i, words[i]]] AS word 
WITH filter(w IN word WHERE w[1] = needle) AS res 
RETURN coalesce(res[0][0], -1) 
+0

두 가지 대안 모두 훌륭했습니다. 그러나 브루노의 첫 번째 작품은 1ms가 걸렸고 두 번째 작품은 18ms가 걸렸습니다. 다시, 나는 매우 감동했다! – ugp

+2

upvoting과 이것을 받아 주셔서 감사합니다,하지만이 허용 대답 :-)해야한다고 생각하지 않습니다. 가능한 경우 APOC를 사용하십시오. –