I am not very experienced with Ruby, but this sounds like a really bad idea? In the worst case, sort might run forever?
Don't know what sort algorithms Ruby uses by default, maybe for some it doesn't matter, but it seems best to not make assumptions about the underlying algo?
You're right that `sort{rand}` is a bad idea, but not because it could run forever. `rand` in Ruby just returns a number like 0.9307038377384, used in sorting this will just always sort the same way (since it's always > 0). So Ruby will use the result of `rand` to determine if one element should be sorted before or after another. So maybe a better solution would be to use `sort{rand - 0.5}` or something, so that it will randomly be either < or > 0.
I was curious so I looked Array#rand in the Active Support source code[1], the implementation uses the following code to get a random element:
def rand
self[Kernel.rand(length)]
end
So, this is much better than sorting the whole array in random order and pulling one off the top :) But it still uses `rand`.
Even better, assuming you _really_ need to get the value for a random key out of the hash, might be:
This doesn't require activesupport, just for comparison.