所以我对设置和使用我的数据结构的最有效方法有几个问题。
首先,我有[header1 string1.1 string1.2 .. string1.n header2 string2.1 .. string2.n ...]
形式的一维字符串数组。我想设置一个2d数组,其中每个stringX.Y
有4个与之关联的整数。
e.g。
header1
string1.1 0 0 0 0
string2.1 0 0 0 0
header2
string2.1 0 0 0 0
...
然后我需要grep多个文件path1/foo* path2/foo*
并使用主master_search_string
结合上面的字符串索引。然后我将根据我期望的硬编码字符串将其分解为4个桶(例如foo bar baz other
)
我的原始(修改)内核如下:
for item in $list;
do
s1=`grep -P "bucket1:.*$item" $path | wc -l`
s2=`grep -P "bucket2:.*$item" $path | wc -l`
s3=`grep -P "bucket3:.*$item" $path | wc -l`
s4=`grep -P "bucket4:.*$item" $path | wc -l`
echo "$item $s1 $s2 $s3 $s4" >> $outFile
done
答案 0 :(得分:0)
我最终回到原始文件并保持字符串列表分开(例如string1.* string2.*
等)。这些是哈希,所以我创建了一个哈希引用数组。要将散列中存储的每个值从标量更改为我所做的数组(为简单起见而修改):
my %full_list;
@list = \(%string1, %string2, %string3);
foreach (0 .. $#list) {
my $temp_list = $list[$_];
foreach my $key (sort keys %$temp_list){
delete $temp_list->{$key};
$temp_list->{$key} = [0,0,0,0]; #this creates a list reference, but not sure if I am doing this the best way
$full_list{$key} = $temp_list->{$key}; #creates a shallow copy so I can index the arrays with either the full_list by index
}
}
最后一行代码解决了我的第二个问题。要索引数组,我们可以$full_list{$key}[0]
。
** 我的代码中可能存在拼写错误,因为它是我实际执行的简化版本。