作者sqrt1089 (李崩子)
看板Perl
标题[问题] hash of array 跟array of hash
时间Sun Oct 23 14:36:29 2011
如标题,请问这两种差在哪
push @{$o{a}},"1";
push @{$o{b}} , "1";
push @{$o{a}} ,"2";
push @{$o{c}} , "3";
这应该是 hash of array吧?
脑中补文应该是长这样:
hash o里面有三个key分别是 a,b 跟 c
其中 a 对应的值 是一个阵列,内元素有 1 跟 2
b 对应的值 是一个阵列,内元素有 1
c 对应的值 也是一个阵列,内元素有 3
问题一:那array of hash 又是要怎麽表达,还是我根本搞颠倒边= =
=====================
有个记事本内文长如下(这是假设的,实际上有6万多笔):
math a
math b
math c
eng a
eng b
eng d
chi a
chi d
chi f
phy g
phy q
...*6万笔
===============code====
#!/usr/bin/perl -w
@name =("a","b");
for $idx(0..$#name){
open (FH,"test.txt")||die"File open Error!\n";
while(<FH>){
chomp;
@array=split(/\t/);
if($array[1] eq $name[$idx]){
push @{$o{$array[0]}},$array[1];
}
}
close (FH);
}
for $ele(keys %o){
push(@out,"$ele\t".scalar @{$o{$ele}}."\n");
}
print @out;
======输出====
C:\>perl play2.p
Use of uninitialized value in string eq at play2.p line 12, <FH> line 12.
Use of uninitialized value in string eq at play2.p line 12, <FH> line 12.
chi 1
math 2
eng 2
意思是说 我输入a 跟 b 然後去记事本找第2栏有a跟b的,
然後把第一栏整理发现有三个群组有包含 a 或 b 这两个元素。最後整理成
chi 有找到一个
math有找到两个
eng 有找到两个
我要问的问题是:我把while包在for里面,原data有6万多笔,每for一次就是scan 6万次
有没有甚麽办法可以只开一次档就能全做?这范例是for 两次的
--
\ ∩──、 =====
\/ ● , \ ======
/\( ● ¯● |つ
| ╳_入_ノ ミ ︵ 用这种饵
(_/ ノ / / 也想让本大爷上钩…
/\___ノ_/ / ======
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 114.39.163.146