How to get unique random items from an array?

2019-01-28 10:25发布

Hey there,
I have an array of (unique) objects and would like to get 4 random objects of this array, but the same object shouldn't be fetched twice, so using a simple random function won't work.

I had two ideas:
1. Shuffle the array and get the first 4 items. -> Overhead, because the array can be very large.
2. Generate a random index. If that index was used before, try again, and so on... -> Somewhat unreliable...

Do you know a better, more efficient method?

1条回答
老娘就宠你
2楼-- · 2019-01-28 11:12

Shuffle the array and get the first 4 items. -> Overhead, because the array can be very large.

Use the modern version of the Fisher Yates shuffle. It can be performed in-place and if you stop after the first four swaps it will give you the result you need. There is no need to shuffle the entire array.

Compared to some other solutions, it also has the advantage that, if only part of the resulting permutation is needed, it can be stopped halfway through

查看更多
登录 后发表回答