如何以随机顺序

问题描述:

返回viewEntryCollection我有使用SSJS(或Java),所以我每次都遇到一个新的秩序将下面的代码如何以随机顺序

var vec:ViewEntryCollection = database.getView("view").getAllEntriesByKey("Mykey",true) 

我怎样才能使“VEC”按随机顺序?

+0

集合有多大? – shillem

+0

嗯,不确定,它可能很大,但这不太可能,可能在200条以下。如果它更容易,就足以不返回整个集合。只需要按照随机顺序返回10个条目 –

+2

如果您只需要返回所有条目的一小部分,那么我不建议对整个集合进行混洗/重新排序。你可以简单地使用'vec.getNthEntry(Math.floor(Math.random()* vec.getCount()));'在一个循环中获得你想要返回的随机条目的数量。如果要防止返回重复条目,则当然必须跟踪已经使用的条目(例如,通过将索引作为关键字将简单SSJS对象中的条目保存)。 –

如何在视图上使用公式为@Unique的辅助排序列。每次都需要刷新视图,如果视图很大,性能可能不会很好。

+0

无法更改视图,对不起 –

考虑到我将通过集合循环的平均集合大小,并将每个项目添加到Java列表或JavaScript数组中。

如果你去Java you can use Collections.shuffle

如果你去的JavaScript you can use well established functions/algorithms

为了获得更好的性能,不要将集合条目在内存中。首先,从你的视角制作UNID列表/数组。这将是最慢的部分。然后选择任意一个随机数,并从列表/数组中选择所需数量的UNID。调用getDocumentByUnid或初始化(例如10)数据源。