免费注册 查看新帖 |

Chinaunix

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

perl数组问题求教 [复制链接]

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-06-28 18:54 |只看该作者 |倒序浏览
不知perl中类似C语言的那种二位数组怎么使用?
例如:
1 1 1 1 1 1 1 0 a a a
1 1 1 1 1 1 1 0 a a a
1 1 1 1 1
想输出某一列的某一行的那个数应该怎么像C那样使用,直接的那种引用数组好像不可以啊!
求教!!

论坛徽章:
1
狮子座
日期:2014-03-27 12:53:15
2 [报告]
发表于 2012-06-28 20:23 |只看该作者
本帖最后由 ciedecem 于 2012-06-28 20:33 编辑
fly_in_thesky 发表于 2012-06-28 18:54
不知perl中类似C语言的那种二位数组怎么使用?
例如:
1 1 1 1 1 1 1 0 a a a


【 Perl的二维数组跟C中二维数组的概念是一样,即,它没有二维或多维数组,有的只是数组的数组。】
但Perl的数组比C的数组灵活多了,特别是多维数组做函数参数方面。

有了这个定海神针,我们就知道如何保存和输出一个二维数组了。

下面是我写code,请指教。
1) 数据文件
> cat twoDim.dat
1 1 1 1 1 1 1 0 a a a
1 1 1 1 1 1 1 0 a a a
1 1 1 1 1

2) code
> cat twoDim
#!/usr/bin/perl

# global array variable: $gArrRef;
# global counter: $count as the first index.

$count =0;
my @tmp;
while( <> )
{
        chmop;
        s/^\s*//;
        s/\s*$//;
       @tmp = $_ =~ m/\w+/g;
        $gArrRef->[$count] = [@tmp];
        ++$count;
}
use Data:: Dumper;
print Dumper $gArrRef;
通过上面的print就知道该数组的结构了。

请采纳



论坛徽章:
2
CU大牛徽章
日期:2013-04-17 11:46:28CU大牛徽章
日期:2013-04-17 11:46:39
3 [报告]
发表于 2012-06-28 20:50 |只看该作者
  1. #!/usr/bin/env perl

  2. @datas;
  3. while (<DATA>) {
  4.     @tmps = split;
  5.     push @datas, [@tmps];
  6. }

  7. print $datas[0][10], "\n";
  8. print $datas[1][9],  "\n";

  9. __DATA__
  10. 1 1 1 1 1 1 1 0 a a a
  11. 1 1 1 1 1 1 1 0 a a a
  12. 1 1 1 1 1
复制代码

论坛徽章:
2
射手座
日期:2014-10-10 15:59:4715-16赛季CBA联赛之上海
日期:2016-03-03 10:27:14
4 [报告]
发表于 2012-06-28 23:46 |只看该作者
回复 1# fly_in_thesky
  1. my @arr;
  2. map{push @arr, [split]} <DATA>;
  3. print $arr[0]->[0];
  4. __DATA__
  5. 1 1 1 1 1 1 1 0 a a a
  6. 1 1 1 1 1 1 1 0 a a a
  7. 1 1 1 1 1
复制代码

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
5 [报告]
发表于 2012-06-28 23:51 |只看该作者
回复 2# ciedecem


   多谢!

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
6 [报告]
发表于 2012-06-28 23:52 |只看该作者
回复 3# cdtits


    多谢!
    还要请教有关这部分知识我可以在哪里学习呢?intermediate perl?

论坛徽章:
0
7 [报告]
发表于 2012-07-01 22:55 |只看该作者
  1. #!/usr/bin/env perl
  2. use warning;
  3. use strict;
  4. my @datas;
  5. while (<DATA>) {
  6.     my @tmps = split; #把元素分割成一个数组
  7.     push @datas, [@tmps]; 象datas中增加一个匿名数组引用
  8. }

  9. print $datas[0][10], "\n";
  10. print $datas[1][9],  "\n";

  11. __DATA__
  12. 1 1 1 1 1 1 1 0 a a a
  13. 1 1 1 1 1 1 1 0 a a a
  14. 1 1 1 1 1
复制代码
等效于下边这行

  1. use warning;
  2. use strict;
  3. my @datas;
  4. while (<DATA>) {
  5.         push @datas, [split];
  6. }

  7. print $datas[0][10], "\n";
  8. print $datas[1][9],  "\n";

  9. __DATA__
  10. 1 1 1 1 1 1 1 0 a a a
  11. 1 1 1 1 1 1 1 0 a a a
  12. 1 1 1 1 1
复制代码
回复 6# fly_in_thesky


   

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
8 [报告]
发表于 2012-07-01 23:24 |只看该作者
C 里面其实也没有二维数组。这一点和 Perl 是一样的。

Pascal 倒是有二维/多维数组。

论坛徽章:
0
9 [报告]
发表于 2012-07-02 08:10 |只看该作者
回复 6# fly_in_thesky


    http://perldoc.perl.org/perldsc.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP