如何以随机顺序
问题描述:
返回viewEntryCollection我有使用SSJS(或Java),所以我每次都遇到一个新的秩序将下面的代码如何以随机顺序
var vec:ViewEntryCollection = database.getView("view").getAllEntriesByKey("Mykey",true)
我怎样才能使“VEC”按随机顺序?
答
如何在视图上使用公式为@Unique
的辅助排序列。每次都需要刷新视图,如果视图很大,性能可能不会很好。
+0
无法更改视图,对不起 –
答
考虑到我将通过集合循环的平均集合大小,并将每个项目添加到Java列表或JavaScript数组中。
如果你去Java you can use Collections.shuffle。
如果你去的JavaScript you can use well established functions/algorithms
答
为了获得更好的性能,不要将集合条目在内存中。首先,从你的视角制作UNID列表/数组。这将是最慢的部分。然后选择任意一个随机数,并从列表/数组中选择所需数量的UNID。调用getDocumentByUnid或初始化(例如10)数据源。
集合有多大? – shillem
嗯,不确定,它可能很大,但这不太可能,可能在200条以下。如果它更容易,就足以不返回整个集合。只需要按照随机顺序返回10个条目 –
如果您只需要返回所有条目的一小部分,那么我不建议对整个集合进行混洗/重新排序。你可以简单地使用'vec.getNthEntry(Math.floor(Math.random()* vec.getCount()));'在一个循环中获得你想要返回的随机条目的数量。如果要防止返回重复条目,则当然必须跟踪已经使用的条目(例如,通过将索引作为关键字将简单SSJS对象中的条目保存)。 –