perl 求合并一个数组的方法[zt]

@a=(
[‘a’,’2’,’4’],
[‘b’,’3’,’2’],
[‘c’,’4’,’4’],
[‘d’,’t’,’3’],
[‘a’,’4’,’5’],
[‘c’,’3’,’5’]
);

判断第一个字段 如果出现相同的 就吧后面的两个字段加一起
想要的结果是这样的

a,24, 45
b ,3, 2
c ,43, 45
d ,t, 3

[ 本帖最后由 luesfeng 于 2009-10-3 13:54 编辑 ]

CODE:

1
2
3
4
5
6
7
8
my %h = ();
for(@a){
push @{$h{$_->[0]}},$_->[1].$_->[2];
}

for(sort keys %h){
print “$_ @{$h{$_}}\n”;
}

CODE:

1
2
3
4
5
C:\file>perl 5.pl
a 24 45
b 32
c 44 35
d t3

记录:
往事(376086596) 20:53:46:
1楼 发表于 2009-10-3 13:13

@a=(
[‘a’,’2’,’4’],
[‘b’,’3’,’2’],
[‘c’,’4’,’4’],
[‘d’,’t’,’3’],
[‘a’,’4’,’5’],
[‘c’,’3’,’5’]
);

判断第一个字段 如果出现相同的 就吧后面的两个字段加一起
想要的结果是这样的

a,24, 45
b ,3, 2
c ,43, 45
d ,t, 3

[ 本帖最后由 luesfeng 于 2009-10-3 13:54 编辑 ]

往事(376086596) 20:54:01:
2楼 发表于 2009-10-3 14:34

[Copy to clipboard] [ - ]
CODE:

1
2
3
4
5
6
7
8
my %h = ();
for(@a){
push @{$h{$_->[0]}},$_->[1].$_->[2];
}

for(sort keys %h){
print “$_ @{$h{$_}}\n”;
}

CODE:

1
2
3
4
5
C:\file>perl 5.pl
a 24 45
b 32
c 44 35
d t3

[ 本帖最后由 hitsubunnu 于 2009-10-3 14:41 编辑 ]

往事(376086596) 20:55:01:
$_->[0]
等于
$_=>[0]
桀傑(277706771) 12:57:01:
$_[0]
往事(376086596) 20:57:25:

往事(376086596) 20:57:43:
二维数组 呵呵
往事(376086596) 20:58:40:
明白了 谢谢 桀傑
莫言(63359149) 13:00:29:
我问个基础问题
Normal(149831165) 13:00:53:
吊帶妹?
桀傑(277706771) 13:01:21:
、□连下吊带妹?
莫言(63359149) 13:01:37:
[]创建的是什么?
莫言(63359149) 13:01:43:
数组引用?
桀傑(277706771) 13:02:43:
在c里面 应该说是指针的偏移数
往事(376086596) 21:03:07:
二维数组 把
Normal(149831165) 13:03:21:
[] 匿名數組吧。
莫言(63359149) 13:03:43:

莫言(63359149) 13:04:02:
$a[1][0]就可以得到值了?
桀傑(277706771) 13:04:15:
匿名数组
Normal(149831165) 13:04:41:
$a[1][0] 就是 4 吧。
Normal(149831165) 13:05:02:
這個應該是數據結構裡的匿名数组引用。
莫言(63359149) 13:05:14:

Normal(149831165) 13:05:35:
數組裡的數組。 還有數組裡的hash , hash 裡的 array
Normal(149831165) 13:05:44:
大駱駝裡有講,我看得好亂,
莫言(63359149) 13:06:55:

莫言(63359149) 13:07:24:
看这个,我要通过$ref得到那个4怎么做?
往事(376086596) 21:07:53:
就是二维数组
往事(376086596) 21:08:06:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
#!/usr/bin/perl
use warnings;
use strict;

my @a=(
['a','2','4'],
['b','3','2'],
['c','4','4'],
['d','t','3'],
['a','4','5'],
['c','3','5']
);

print $a[1][1];

3
莫言(63359149) 13:08:26:

莫言(63359149) 13:08:35:
@$ref[0]
往事(376086596) 21:09:42:
$a[1][0]
莫言(63359149) 13:09:41:

mzpbvsig(972403325) 13:09:43:
jj=[]创建的相当
my @hh=();
jj=/@hh;
往事(376086596) 21:09:51:
$a[1][0]
往事(376086596) 21:09:55:
等于4
莫言(63359149) 13:10:51:
主要我不明白 @{$a[1]}[0] 怎么可以写 $[1][0] 我知道C的多维数组是这样
往事(376086596) 21:11:17:

莫言(63359149) 13:11:39:
我是不是钻牛角尖了
Normal(149831165) 13:12:33:
Perl 的語法太靈活, 太多變。 我覺得沒有必要太深究
莫言(63359149) 13:12:44:
@{$a[1]}[0] $a[1]得到匿名数组的引用 @{}得到数组本身 [0] splice(383438137) 13:13:34:

莫言(63359149) 13:13:48:
没有人感兴趣
Normal(149831165) 13:13:56:
@{$a[1]}[0] 分析: $a[1] 是匿名array 的引用, @{$a[1]} 以數組的形式去訪問這個引用。 @{$a[1]}[0] 得到第1個值
莫言(63359149) 13:14:25:
我就是这样子写的
莫言(63359149) 13:14:29:
$a[1][0] 是什么意思?
莫言(63359149) 13:15:05:
$a[1] != @{$a[1]}
往事(376086596) 21:15:34:
$a[1][0]
矩阵a的2行一列的元素
往事(376086596) 21:15:42:
可以当矩阵来理解
莫言(63359149) 13:16:01:

往事(376086596) 21:16:20:
这个a其实是一个二维数组 就是矩阵了
莫言(63359149) 13:17:16:
$a[1][0]理解为@{$a[1]}[0]的简写,可行?
往事(376086596) 21:18:08:
我感觉可以 他俩都是一回事
莫言(63359149) 13:18:37:
$a[1][0] perl是怎么求值的?
Normal(149831165) 13:18:47:
應該是可以的 $a[1]->[0] 我估計這樣寫也是可以的。
我是版主(275094581) 13:18:58:
全国各地程序员工资待遇调查仅查看共享 http://spreadsheets.google.com/ccc?key=pJEIRoZ3AmaQAHRgzKw7NJg
莫言(63359149) 13:20:31:
$a[1]->[0] 可以,试了
莫言(63359149) 13:20:46:
这个是什么意思?
往事(376086596) 21:20:54:
可以
往事(376086596) 21:21:14:
我估计这就是二维数组的写法
桀傑(277706771) 13:21:47:
$a[1][0]理解为@{$a[1]}[0]的简写,可行? 为什么这样写@{$a[1]}[0] 没有可读性
Normal(149831165) 13:21:49:
這樣從面向對象的方向比就較好理解了。
桀傑(277706771) 13:22:10:
${$a[1]}[0]有可读性
往事(376086596) 21:22:19:

http://blog.sina.com.cn/s/blog_4af3f0d20100e59x.html

往事(376086596) 21:22:23:
看看这里
Normal(149831165) 13:22:25:
$a[1]這個數組對象的第一個元素
莫言(63359149) 13:22:40:
桀傑(277706771) 13:22:10 ${$a[1]}[0]有可读性
莫言(63359149) 13:22:45:
这个不行
莫言(63359149) 13:23:05:
-> 是什么意思?
桀傑(277706771) 13:23:19:

Normal(149831165) 13:23:24:
向象對向裡,我的理解就是它的一個方法。
桀傑(277706771) 13:23:48:
其次$a[1]->[0]是同样的效果
Normal(149831165) 13:24:01:
比如說, $student->get_name()
Normal(149831165) 13:24:17:
我是這樣理解。
莫言(63359149) 13:24:36:
我理解就是通过引用访问
往事(376086596) 21:25:22:
$ref_to_AoA 是一个数组引用,而 @AoA 是一个
数组。同样地,$AoA[2] 也不是一个数组,而是一个数组引用
往事(376086596) 21:25:49:
数组的(9php.com)数组就是一个普通的(9php.com)数组(@AoA),不过可以接受两个下标($AoA[3][2])。
下面先定义一个这样的(9php.com)数组:

1
2
3
4
5
6
7
8
9
# 一个包含有"指向数组的(9php.com)引用"的(9php.com)数组
@AoA = (
[ "fred", "barney" ],
[ "george", "jane", "elroy" ],
[ "homer", "marge", "bart" ],
);

print $AoA[2][2];
bart

你可能已经注意到,外面的(9php.com)括号是圆括号,这是因为我们想要给数组赋值,所以需要圆括号。如果你希望这里是 @AoA,而是一个指向它的(9php.com)引用,那么就得这样:

1
2
3
4
5
6
7
# 一个指向“包含有数组引用的(9php.com)数组”的(9php.com)引用
$ref_to_AoA = [
[ "fred", "barney", "pebbles", "bambam", "dino", ],
[ "homer", "bart", "marge", "maggie", ],
[ "george", "jane", "elroy", "judy", ],
];
print $ref_to_AoA->[2][2];

阳光男孩(244651259) 13:25:54:
$AoA[2]是一个数组的元素
往事(376086596) 21:26:12:
$AoA[2] 也不是一个数组,而是一个数组引用。所以下面这两行:

1
2
$AoA[2][2]
$ref_to_AoA->[2][2]

也可以用这两行来代替:

1
2
$AoA[2]->[2]
$ref_to_AoA->[2]->[2]

往事(376086596) 21:26:21:
$AoA[2] 也不是一个数组,而是一个数组引用
阳光男孩(244651259) 13:26:19:
而这个元素是一个数组引用
莫言(63359149) 13:26:40:

往事(376086596) 21:26:56:
莫言(63359149) 13:24:36:
我理解就是通过引用访问

莫言(63359149) 13:27:37:
看上面那个
莫言(63359149) 13:27:41:
$ref->[2]
Normal(149831165) 13:29:40:
對,
Normal(149831165) 13:29:43:
就是引用
莫言(63359149) 13:29:58:

Normal(149831165) 13:30:01:
-> 這個符號就是找到直正的對象。
往事(376086596) 21:30:56:

往事(376086596) 21:31:07:
感觉就是这个样子了
莫言(63359149) 13:31:12:

莫言(63359149) 13:31:41:
看上面那个 @{$ref}{a}
莫言(63359149) 13:31:49:
hash splice
莫言(63359149) 13:32:10:
我还是不很理解为什么不是 %{$ref}{a}
桀傑(277706771) 13:32:33:
@a=([1,2,3],[4,5,6]); $a[1][1]=10;
桀傑(277706771) 13:32:58:
为什么你不理解是${$ref}{a}呢?
莫言(63359149) 13:33:36:
你试试,结果截图
往事(376086596) 21:35:24:

1
2
3
4
5
6
7
8
my %h = ();
for(@a){
push @{$h{$_->[0]}},$_->[1].$_->[2];
}

for(sort keys %h){
print “$_ @{$h{$_}}\n”;
}

在这里用 push @{$h{$_->[0]}},$_->[1].$_->[2]; 还是挺好的,因为push后面加的是数组
莫言(63359149) 13:36:25:

沧海泛舟(370725724) 13:36:26:
学了2年perl,现在又用不上了,真郁闷啊
莫言(63359149) 13:36:43:
$a[1][0] 就是 $a[1]->[0]?
沧海泛舟(370725724) 13:36:52:
是的
往事(376086596) 21:37:02:
在别的地方想引用 就可以用$a[1][0]
桀傑(277706771) 13:37:05:

沧海泛舟(370725724) 13:37:21:
两个中括号之间隐含着一个箭头,可以省掉
桀傑(277706771) 13:37:38:
@a=([1,2,3],[4,5,6]); $a[1][1]=10; 试试这个
莫言(63359149) 13:37:58:

莫言(63359149) 13:38:05:
就是这样子
Normal(149831165) 13:38:38:
hash 的呢?
莫言(63359149) 13:38:47:

莫言(63359149) 13:39:24:
刚理解的 hash splice
桀傑(277706771) 13:39:28:

莫言(63359149) 13:39:47:
那个@{}就是得到一个列表对象
往事(376086596) 21:40:06:
桀傑(277706771) 13:37:38:
@a=([1,2,3],[4,5,6]); $a[1][1]=10; 试试这个

1
2
3
4
5
6
7
8
#!/usr/bin/perl
use warnings;
use strict;
my @a;

@a=([1,2,3],[4,5,6]);

print $a[1][1];

5
Normal(149831165) 13:40:47:
hash splice ?
怪哉(563155382) 13:41:06:
大家好
莫言(63359149) 13:41:13:

怪哉(563155382) 13:41:14:
请教个firefox的问题
莫言(63359149) 13:41:17:
注意这个
怪哉(563155382) 13:41:33:
为什么我打开firefox链接时总是形成双层窗口
莫言(63359149) 13:41:36:
那个hash是% @{}怎么来的
往事(376086596) 21:43:26:

莫言(63359149) 13:43:43:
都搞懂了
莫言(63359149) 13:44:38:
我原来用二维数组的方法好笨
往事(376086596) 21:45:16:
呵呵
桀傑(277706771) 13:45:41:

莫言(63359149) 13:45:52:
my @a=([1,2,3],[4,5,6]); my @aa = @{$a[1]}; die $aa[0];
往事(376086596) 21:46:28:
噢 你这样用阿
莫言(63359149) 13:46:35:

桀傑(277706771) 13:46:43:
晕 又多占了点内存
莫言(63359149) 13:47:02:
还有
莫言(63359149) 13:48:00:
my @a=([1,2,3],[4,5,6]); die ${$a[1]}[0];
莫言(63359149) 13:48:09:

往事(376086596) 21:48:47:
呵呵
往事(376086596) 21:49:01:
这下好了 方便了很多
桀傑(277706771) 13:49:05:
额 吊带 我想说 ${$a[1]}[0]; 这本来就是调用了引用
莫言(63359149) 13:49:16:
跟C一样子了
莫言(63359149) 13:50:29:
${$a[1]}[0] 也是相当费解
桀傑(277706771) 13:50:41:
-.-!~
桀傑(277706771) 13:50:53:
一点也不费解
桀傑(277706771) 13:50:55:
.==
莫言(63359149) 13:51:13:
${$a[1]}[0] @{$a[1]}[0] 一样的
莫言(63359149) 13:51:44:

桀傑(277706771) 13:52:19:
在perl中 对多列表的引用这是这样的格式${}
莫言(63359149) 13:52:28:

莫言(63359149) 13:54:17:
终于都理解了
往事(376086596) 21:54:30:
恩 我也理解了点 呵呵