构建地图不允许索引收集作为地图密钥?

时间:2015-03-25 20:16:02

标签: neo4j cypher

所以我试着给this question写一个对我来说似乎很有趣的答案。怎么了,我会试一试。

这是我提出的解决方案。这似乎对我来说是正确的,并且应该产生正确的结果,而是产生一个密码解析错误。

所以这里的游戏是采用两个集合(字母和数字)并构建一个地图,将正确的数字映射到正确的数字,从两个集合中顺序排列。

我的解决方案:

with [1,2,3] as nums, ['a', 'b', 'c'] as letters
with nums, letters, range(0, length(nums)-1) as idxs
return extract(idx in idxs | { letters[idx] : nums[idx] });

我的理由是我需要遍历集合索引,以便我可以使用相同的索引来#34;推进两个集合"同时。我使用extract来获取每个索引,然后构建嵌套映射,该映射将相应的项配对。

除非它失败,因为cypher说:

Invalid input '[': expected an identifier character, whitespace, '}' or ':' (line 3, column 39 (offset: 140))
"return extract(idx in idxs | { letters[idx] : nums[idx] });"
                                       ^

更新:cybersam回答了原始问题here并指出"可能无法动态创建地图密钥"。所以我真正的问题是 - 是否准确(地图不能有动态键),如果是,为什么?

1 个答案:

答案 0 :(得分:1)

这只是密码的“限制”。你可以试试这个:

WITH 'a' as key, 'test' as value
RETURN {key: value}

但结果如下:

{"key":"test"}

Cyber​​sam的回答显示了正确的方法。像这样:

WITH 'a' as key, 'test' as value, 'b' as key2, 'test2' as value2
RETURN [{key: key, value: value}, {key: key2, value: value2}]

会产生结果:

[{"key":"a","value":"test"},{"key":"b","value":"test2"}]

要创建动态地图密钥,您必须使用java或其他编程语言。