- 예를, Neo4j의 목록에있는 문자열의 위치를 찾기 사이퍼 난 목록에서 문자열의 인덱스 값을 찾을 것이라고 어떻게
WITH split ("what is porsche",' ')
에 대한이 어떻게 3과 '포르쉐'의 위치를 찾아 낼 것입니다 ?
- 예를, Neo4j의 목록에있는 문자열의 위치를 찾기 사이퍼 난 목록에서 문자열의 인덱스 값을 찾을 것이라고 어떻게
WITH split ("what is porsche",' ')
에 대한이 어떻게 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
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 :
CASE 식 size(), 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 반환 .
나는 또한 지능형리스트 바닐라 사이퍼의 솔루션을 제공하는 작업 만했다 당신이 나를 이길 :
이
는 하나 라이너 그것에. 큰! –으로 브루노 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
이를 구현하기위한 또 다른 방법 발견하기를 원한다면 보통 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)
두 가지 대안 모두 훌륭했습니다. 그러나 브루노의 첫 번째 작품은 1ms가 걸렸고 두 번째 작품은 18ms가 걸렸습니다. 다시, 나는 매우 감동했다! – ugp
upvoting과 이것을 받아 주셔서 감사합니다,하지만이 허용 대답 :-)해야한다고 생각하지 않습니다. 가능한 경우 APOC를 사용하십시오. –
방금 한 줄짜리를 사용했습니다. 잘 작동합니다! – ugp