Chinaunix
标题:
已经解决.结贴 脚本 Perl - 如何从 hash 中获取一个随机的键
[打印本页]
作者:
sunzhiguolu
时间:
2015-11-30 12:24
标题:
已经解决.结贴 脚本 Perl - 如何从 hash 中获取一个随机的键
本帖最后由 sunzhiguolu 于 2015-11-30 13:39 编辑
我的代码如下:
#!/usr/bin/perl
use strict;
use warnings;
my %hChars = (
'A' => 'a',
'B' => 'b',
'C' => 'c',
'D' => 'e',
'E' => 'e',
'F' => 'f',
);
复制代码
希望从 [A-F] 的键序列中随机的取出一个键, 请大家提供一个思路. 先谢过大家了.
说明: 哈西变量 %hChars 的键没有明显的规律, 在这里只是为了说明问题 采用了由大写字母 [A-F] 的键.
作者:
sunzhiguolu
时间:
2015-11-30 13:16
本帖最后由 sunzhiguolu 于 2015-11-30 13:17 编辑
我的比较费事的方法, 部分代码如下:
my $sMaxIndex = scalar (%hChars) - 1;
my @aKeys = keys %hChars;
my $sKey = $aKeys[int (rand $sMaxIndex)];
复制代码
需要通过一个数组将哈西变量中的所有键保存起来, 再通过一个随机整数进行获取.
有没有更直观的方法能够从哈西中提取一个
随机
的键?
作者:
104359176
时间:
2015-11-30 13:22
本帖最后由 104359176 于 2015-11-30 13:25 编辑
有现成的内置模块可以做这个,
shuffle
,用于从一个列表中随机的取出元素:
use List::Util qw(shuffle);
my $random_key = shuffle(keys %hash);
复制代码
作者:
sunzhiguolu
时间:
2015-11-30 13:38
回复
3#
104359176
use List::Util qw (shuffle);
...
my $sRandomKey = shuffle (keys %hChars);
复制代码
谢谢您. 比我的方法好多了.
欢迎光临 Chinaunix (http://bbs.chinaunix.net/)
Powered by Discuz! X3.2