如何从 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]);
}
}
我正在解决一个问题,我需要从 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]);
}
}