File tree Expand file tree Collapse file tree 1 file changed +11
-7
lines changed Expand file tree Collapse file tree 1 file changed +11
-7
lines changed Original file line number Diff line number Diff line change @@ -254,16 +254,20 @@ func (k Keeper) GetRandomAssignedMembers(
254
254
}
255
255
256
256
var selected []types.Member
257
- for i := uint64 (0 ); i < t ; i ++ {
258
- randomNumber := rng .NextUint64 () % members_size
257
+ memberIdx := make ([]int , members_size )
258
+ for i := 0 ; i < int (members_size ); i ++ {
259
+ memberIdx [i ] = i
260
+ }
259
261
260
- // Get the selected member.
261
- selected = append ( selected , members [ randomNumber ] )
262
+ for i := uint64 ( 0 ); i < t ; i ++ {
263
+ randomNumber := rng . NextUint64 () % ( members_size - i )
262
264
263
- // Remove the selected member from the list.
264
- members = append (members [:randomNumber ], members [randomNumber + 1 :]... )
265
+ // Swap the selected member with the last member in the list
266
+ memberId := memberIdx [randomNumber ]
267
+ memberIdx [randomNumber ] = memberIdx [members_size - i - 1 ]
265
268
266
- members_size -= 1
269
+ // Append the selected member to the selected list
270
+ selected = append (selected , members [memberId ])
267
271
}
268
272
269
273
// Sort selected members
You can’t perform that action at this time.
0 commit comments