免费注册 查看新帖 |

Chinaunix

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

数组程式求解释(已解决!)感谢论坛牛人pitonas ! [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2014-08-04 10:39 |只看该作者 |倒序浏览
本帖最后由 求浩871227 于 2014-08-04 16:37 编辑

来自论坛牛人pitonas的当时帮助提供的程式:
while (<DATA>) {
    my @a = map split, $_, ~~<DATA>, ~~<DATA>;
    say "@a[ 0, 2 ]";
    say "@a[ 4, 1 ]";
    say "@a[ 3, 5 ]";
}

__DATA__
1 4
2 5
3 6
7 10
8 11
9 12
13 16
14 17
15 18
19 22
20 23
21 24
25 28
26 29
27 30

“my @a = map split, $_, ~~<DATA>, ~~<DATA>;”
pitonas再次细心解答(太感谢!!!):

# in scalar context:

my $a = <DATA>;    # read only one line

# in list context:

my @a = scalar <DATA>;    # read only one line
my @b = ~~ <DATA>;          # read only one line
my @c = <DATA>;           # read all lines


my @a = map { ... } ...   # list context

# 这些相同。

my @a = map split, $_, ~~<DATA>, ~~<DATA>;
my @a = map { split } $_, ~~<DATA>, ~~<DATA>;
my @a = map { split } $_, scalar <DATA>, scalar <DATA>;
my @a = map { split /\s+/ } $_, scalar <DATA>, scalar <DATA>;
my @a = map { split /\s+/, $_ } $_, scalar <DATA>, scalar <DATA>;

论坛徽章:
5
丑牛
日期:2014-01-21 08:26:26卯兔
日期:2014-03-11 06:37:43天秤座
日期:2014-03-25 08:52:52寅虎
日期:2014-04-19 11:39:48午马
日期:2014-08-06 03:56:58
2 [报告]
发表于 2014-08-04 20:54 |只看该作者
这个有很多种写法 ~ {:2_179:}

1: 幼儿园风格的代码 ( 包含无用的操作 )
  1. #!/usr/bin/perl

  2. my $TRUE = 1;

  3. while ($TRUE) {

  4.     my $line1 = readline DATA;
  5.     my $line2 = readline DATA;
  6.     my $line3 = readline DATA;

  7.     chomp $line1;
  8.     chomp $line2;
  9.     chomp $line3;

  10.     my @lines1 = split /\s/, $line1;
  11.     my @lines2 = split /\s/, $line2;
  12.     my @lines3 = split /\s/, $line3;

  13.     my @three_lines = ();
  14.     my $index       = 0;

  15.     for ( my $i = 0 ; $i < @lines1 ; $i++ ) {
  16.         $three_lines[$index] = $lines1[$i];
  17.         $index = $index + 1;
  18.     }

  19.     for ( my $i = 0 ; $i < @lines2 ; $i++ ) {
  20.         $three_lines[$index] = $lines2[$i];
  21.         $index = $index + 1;
  22.     }

  23.     for ( my $i = 0 ; $i < @lines3 ; $i++ ) {
  24.         $three_lines[$index] = $lines3[$i];
  25.         $index = $index + 1;
  26.     }

  27.     print $three_lines[0];
  28.     print ' ';
  29.     print $three_lines[2];
  30.     print "\n";
  31.     print $three_lines[4];
  32.     print ' ';
  33.     print $three_lines[1];
  34.     print "\n";
  35.     print $three_lines[3];
  36.     print ' ';
  37.     print $three_lines[5];
  38.     print "\n";

  39.     $TRUE = 0 if eof;

  40. }

  41. __DATA__
  42. 1 4
  43. 2 5
  44. 3 6
  45. 7 10
  46. 8 11
  47. 9 12
  48. 13 16
  49. 14 17
  50. 15 18
复制代码
2: 简约低调有内涵的代码
  1. #!/usr/bin/perl

  2. until (eof) {
  3.     my @a = split /\s/, <DATA> . <DATA> . <DATA>;
  4.     print map "@a[@$_]\n", [ 0, 2 ], [ 4, 1 ], [ 3, 5 ];
  5. }

  6. __DATA__
  7. 1 4
  8. 2 5
  9. 3 6
  10. 7 10
  11. 8 11
  12. 9 12
  13. 13 16
  14. 14 17
  15. 15 18
复制代码
  1. #!/usr/bin/perl

  2. until (eof) {
  3.     my @a = map split, ~~ <DATA>, ~~ <DATA>, ~~ <DATA>;
  4.     print "@a[@$_]\n" for [ 0, 2 ], [ 4, 1 ], [ 3, 5 ];
  5. }

  6. __DATA__
  7. 1 4
  8. 2 5
  9. 3 6
  10. 7 10
  11. 8 11
  12. 9 12
  13. 13 16
  14. 14 17
  15. 15 18
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP