免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3720 | 回复: 3
打印 上一主题 下一主题

已经解决.结贴 脚本 Perl - 如何从 hash 中获取一个随机的键 [复制链接]

论坛徽章:
307
程序设计版块每周发帖之星
日期:2016-04-08 00:41:33操作系统版块每日发帖之星
日期:2015-09-02 06:20:00每日论坛发贴之星
日期:2015-09-02 06:20:00程序设计版块每日发帖之星
日期:2015-09-04 06:20:00每日论坛发贴之星
日期:2015-09-04 06:20:00每周论坛发贴之星
日期:2015-09-06 22:22:00程序设计版块每日发帖之星
日期:2015-09-09 06:20:00程序设计版块每日发帖之星
日期:2015-09-19 06:20:00程序设计版块每日发帖之星
日期:2015-09-20 06:20:00每日论坛发贴之星
日期:2015-09-20 06:20:00程序设计版块每日发帖之星
日期:2015-09-22 06:20:00程序设计版块每日发帖之星
日期:2015-09-24 06:20:00
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2015-11-30 12:24 |只看该作者 |倒序浏览
本帖最后由 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] 的键.

论坛徽章:
307
程序设计版块每周发帖之星
日期:2016-04-08 00:41:33操作系统版块每日发帖之星
日期:2015-09-02 06:20:00每日论坛发贴之星
日期:2015-09-02 06:20:00程序设计版块每日发帖之星
日期:2015-09-04 06:20:00每日论坛发贴之星
日期:2015-09-04 06:20:00每周论坛发贴之星
日期:2015-09-06 22:22:00程序设计版块每日发帖之星
日期:2015-09-09 06:20:00程序设计版块每日发帖之星
日期:2015-09-19 06:20:00程序设计版块每日发帖之星
日期:2015-09-20 06:20:00每日论坛发贴之星
日期:2015-09-20 06:20:00程序设计版块每日发帖之星
日期:2015-09-22 06:20:00程序设计版块每日发帖之星
日期:2015-09-24 06:20:00
2 [报告]
发表于 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)];
复制代码
需要通过一个数组将哈西变量中的所有键保存起来, 再通过一个随机整数进行获取.
有没有更直观的方法能够从哈西中提取一个 随机 的键?

求职 : 软件工程师
论坛徽章:
3
程序设计版块每日发帖之星
日期:2015-10-07 06:20:00程序设计版块每日发帖之星
日期:2015-12-13 06:20:00程序设计版块每日发帖之星
日期:2016-05-05 06:20:00
3 [报告]
发表于 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);
复制代码

评分

参与人数 1信誉积分 +10 收起 理由
sunzhiguolu + 10 很给力!

查看全部评分

论坛徽章:
307
程序设计版块每周发帖之星
日期:2016-04-08 00:41:33操作系统版块每日发帖之星
日期:2015-09-02 06:20:00每日论坛发贴之星
日期:2015-09-02 06:20:00程序设计版块每日发帖之星
日期:2015-09-04 06:20:00每日论坛发贴之星
日期:2015-09-04 06:20:00每周论坛发贴之星
日期:2015-09-06 22:22:00程序设计版块每日发帖之星
日期:2015-09-09 06:20:00程序设计版块每日发帖之星
日期:2015-09-19 06:20:00程序设计版块每日发帖之星
日期:2015-09-20 06:20:00每日论坛发贴之星
日期:2015-09-20 06:20:00程序设计版块每日发帖之星
日期:2015-09-22 06:20:00程序设计版块每日发帖之星
日期:2015-09-24 06:20:00
4 [报告]
发表于 2015-11-30 13:38 |只看该作者
回复 3# 104359176

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

   
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP