免费注册 查看新帖 |

Chinaunix

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

如何得到hash中value大于某一值的key [复制链接]

论坛徽章:
1
程序设计版块每日发帖之星
日期:2015-07-08 22:20:00
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2016-01-21 15:11 |只看该作者 |倒序浏览
本帖最后由 yilongyansha 于 2016-01-22 10:21 编辑

%hash = (
"1"=>"23",
"2"=>"61",
"3"=>"159",
"4"=>"178",
"5"=>"68",
"6"=>"43",
"7"=>"267",
"8"=>"59",
"9"=>"163",
"10"=>"10",
"11"=>"91"
)

对hash的键排序,如何找出哈希表中value大于100的最小的key和最大的key,如上面的hash中得到的first_key=3,last_key=9,
找first_key比较好找,我写的代码如下:
  1. use strict;
  2. use warnings;

  3. my %hash = (
  4. "1"=>"23",
  5. "2"=>"61",
  6. "3"=>"159",
  7. "4"=>"178",
  8. "5"=>"68",
  9. "6"=>"43",
  10. "7"=>"267",
  11. "8"=>"59",
  12. "9"=>"163",
  13. "10"=>"10",
  14. "11"=>"91"
  15. );

  16. my ($first_key,$last_key);
  17. foreach my $key (sort keys %hash) {
  18.     if ($hash{$key}>100) {
  19.         $first_key = $key;
  20.         last;
  21.     }
  22. }
  23. print $first_key,"\n";
复制代码

论坛徽章:
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 [报告]
发表于 2016-01-21 16:00 |只看该作者
回复 1# yilongyansha
foreach my $key (reverse sort keys %hash) {
    if ($hash{$key}>100) {
        $last_key = $key;
        last;
    }
}


   

论坛徽章:
0
3 [报告]
发表于 2016-01-21 16:08 |只看该作者
你可以把所有大于100的KEY放入一个数组,数组的第一个值就是第一个key,最后一个值是最后一个key。

注意sort的用法,你现在的排序可能并不是你想要的结果,默认并不是按数字大小排序的。

评分

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

查看全部评分

论坛徽章:
1
程序设计版块每日发帖之星
日期:2015-07-08 22:20:00
4 [报告]
发表于 2016-01-21 16:25 |只看该作者
回复 2# sunzhiguolu

写2个循环体有点麻烦

论坛徽章:
1
程序设计版块每日发帖之星
日期:2015-07-08 22:20:00
5 [报告]
发表于 2016-01-21 16:28 |只看该作者
回复 3# iamlimeng

好方法!

排序是不是要这样写:
  1. sort { $a <=> $b} keys %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
6 [报告]
发表于 2016-01-21 16:33 |只看该作者
本帖最后由 sunzhiguolu 于 2016-01-21 17:32 编辑

回复 4# yilongyansha
  1. my ($first_key, $last_key);
  2. foreach (sort keys %hash){
  3.         if ($hash{$_} > 100){
  4.                 $first_key = $_ unless (defined $first_key);
  5.                 $last_key = $_;
  6.         }
  7. }
  8. print "$first_key | $last_key\n";
复制代码

论坛徽章:
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
7 [报告]
发表于 2016-01-21 16:36 |只看该作者
回复 3# iamlimeng
非常感谢指点, 谢谢!

   

论坛徽章:
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
8 [报告]
发表于 2016-01-21 16:50 |只看该作者
本帖最后由 sunzhiguolu 于 2016-01-21 17:09 编辑

回复 3# iamlimeng
明白了, 非常感谢您!

   

论坛徽章:
1
程序设计版块每日发帖之星
日期:2015-07-08 22:20:00
9 [报告]
发表于 2016-01-21 17:03 |只看该作者
回复 6# sunzhiguolu

没看明白
$first_key = $_ unless ($first_key);
$last_key = $_;
能解释一下这2句吗,谢谢~

论坛徽章:
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
10 [报告]
发表于 2016-01-21 17:12 |只看该作者
回复 9# yilongyansha
$first_key = $_ unless ($first_key); # 如果 $first_key 未定义便对其进行赋值操作
$last_key = $_; # 重复更新

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

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP