Chinaunix

标题: 已经解决.结贴 脚本 Perl - 如何从 hash 中获取一个随机的键 [打印本页]

作者: sunzhiguolu    时间: 2015-11-30 12:24
标题: 已经解决.结贴 脚本 Perl - 如何从 hash 中获取一个随机的键
本帖最后由 sunzhiguolu 于 2015-11-30 13:39 编辑

我的代码如下:
  1. #!/usr/bin/perl
  2. use strict;
  3. use warnings;

  4. my %hChars = (
  5. 'A' => 'a',
  6. 'B' => 'b',
  7. 'C' => 'c',
  8. 'D' => 'e',
  9. 'E' => 'e',
  10. 'F' => 'f',
  11. );
复制代码
希望从 [A-F] 的键序列中随机的取出一个键, 请大家提供一个思路. 先谢过大家了.
说明: 哈西变量 %hChars 的键没有明显的规律, 在这里只是为了说明问题 采用了由大写字母 [A-F] 的键.
作者: sunzhiguolu    时间: 2015-11-30 13:16
本帖最后由 sunzhiguolu 于 2015-11-30 13:17 编辑

我的比较费事的方法, 部分代码如下:

  1. my $sMaxIndex = scalar (%hChars) - 1;
  2. my @aKeys = keys %hChars;
  3. my $sKey = $aKeys[int (rand $sMaxIndex)];
复制代码
需要通过一个数组将哈西变量中的所有键保存起来, 再通过一个随机整数进行获取.
有没有更直观的方法能够从哈西中提取一个 随机 的键?

作者: 104359176    时间: 2015-11-30 13:22
本帖最后由 104359176 于 2015-11-30 13:25 编辑

有现成的内置模块可以做这个,shuffle,用于从一个列表中随机的取出元素:


  1. use List::Util qw(shuffle);

  2. my $random_key = shuffle(keys %hash);
复制代码

作者: sunzhiguolu    时间: 2015-11-30 13:38
回复 3# 104359176

  1. use List::Util qw (shuffle);
  2. ...
  3. my $sRandomKey = shuffle (keys %hChars);
复制代码
谢谢您. 比我的方法好多了.

   




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2