如何从 keySet 中提取随机字符串?

How to pull random string from a keySet?

我正在解决一个问题,我需要从 keySet 中提取随机字符串。只是想知道是否有人可以在这里给我一些指导。我很迷茫。如果我使用的是 int 而不是 String,我已经找到了很多方法来做到这一点。例如,我想就州及其首都向用户提问,并从问题的 keySet 中随机抽取一个 Key。 这是集合:

Set<String> states = stateCapitals.keySet();

Set 不是随机索引的最佳数据结构。

最好转换为 List 并使用随机生成器将 select 转换为 index。如果你真的需要留在 Set 上,你可以生成一个随机索引 n 并遍历 Set,在 nth element 处停止。对于 selecting 多个元素,使用 List 没有任何好处。任何 iterable 都可以。

关键思想是动态调整select离子概率,这样你就可以选择m(超出sizeof(Set)):在最简单的例子m=1中,select 1st概率为 1/N 的元素,如果你没有 select,则 select 2nd element 概率为 1/(N-1)..等等。

使用条件概率显示所有元素都select在公平的机会下1/N

ArrayList<States> statesList = new ArrayList<>( states );
State x = statesList.get( (int)(statesList.size() * Math.random()) );

上面的代码会得到你想要的,但如果它是一个非常大的列表,这可能是低效的。

类似于HashSet的keySet是无序的,因此不保证集合中元素的顺序。因此,从一组中拉出随机字符串可能不是那么有效。

将集合转换为数组或列表,然后执行随机字符串获取可能是一个很好的解决方案。

String ranKey = map.keySet().toArray()[new Random().nextInt(map.keySet().size())].toString();

试试这个代码

onPress: function () {
        debugger;
        var textArray = ['Pritesh', 'Nimesh', 'Harshil', 'Ravi', 'Amit', 'Brijesh'];
        var randomNumber = Math.floor(Math.random() * textArray.length);
        for (var i = 0; i < textArray.length; i++) {
            if (i === randomNumber) {
                console.log(textArray[i]);
            }
        }