2014-01-13 204 views
1

從集合中隨機選擇項目的最佳方法是什麼?選擇集合中的隨機元素

例如,我試圖做到這一點:

match (m:Merchant) return collect(m)[round(rand())] 

,但我得到這個錯誤,這表明圓()返回一個double:

Type mismatch: expected Integer or Long but was Double (line 1, column 38) 
    "match (m:Merchant) return collect(m)[round(rand())] limit 10" 

我會使用答案在這篇文章中提供,neo4j: Is there a way/how to select random nodes?但我不想連續的節點。

+0

我認爲這是'round()'中的一個錯誤。返回[1,2,3] [round(rand())]','RETURN [1,2,3] [round(0.1)]'和'WITH round(0.1) 3] [x]'拋出異常,而'RETURN [1,2,3] [round(0.1)* 1]'工作。與'floor()'一樣,它們只是不返​​回整數。除非新人們有其他意見,否則你可能會考慮在github上提出一個問題。這裏有一個類似(關閉)的問題:https://github.com/neo4j/neo4j/issues/71 – jjaderberg

回答

1

根據文檔,round應該返回一個整數(試過這個,它確實給了我一個整數)。任何方式,round(rand())會給你0或1嗎?因此,也許你可以試試:

match (m:Merchant) 
with collect(m) as allMerchants, length(collect(m)) as totalMerchants 
return allMerchants[round(rand()*(totalMerchants-1))] 
0

一些工作後,我發現,您可以通過藍德集團的項目由RAND(),然後順序。

例如: 匹配(M:商家)與男,蘭特()作爲蘭特回報μm級蘭德公司限1

希望這可以幫助別人!

+0

這比Luanne的解決方案更昂貴。 –