讓我們首先將數據進入的Perl。您將打開文件,並將其讀入第一個空格的散列分割。我不在乎a
,b
,c
,或d
拆分成單獨的數據,因爲它使得在程序中並無區別:
use strict;
use warnings;
use autodie;
open INPUT, "<", "TEST.txt";
my %array;
while my $line (<INPUT>) {
chomp $line;
my ($key, $data) = split /\s+/, $line, 2;
$array{$key} = $value;
}
這將爲我們提供以下內容:
$array{car} = "1 2 0 7";
$array{tram} = "7 8 9 5";
$array{bus_db} = "1 6 3 8";
$array{cari} = "";
$array{busi_db} = "";
現在,東西你還沒有解釋:你如何知道空數組成員匹配非空的數組成員。我如何知道cari
匹配car
和busi_db
匹配bus_db
?是否將i
追加到最後,但在可能的db
後綴之前?他們的其他事情我們應該知道嗎?
一旦你看着辦吧,讓他們匹配是非常簡單的:
$array{busi_db} = $array{bus_db};
然後,它打印出來的一件簡單的事情。
# Go through array and make "null" members match
while my $key (sort keys %array) {
if (not $array{$key}) { #Ah! a null array member!
$matching_key = find_matching_key($key);
$array{$key} = $array{$matching_key};
}
}
# Print them out
while my $key (sort keys %array) {
print "$key = $array{$key}\n";
}
sub find_matching_key {
# Here be dragons....
}
問題是find_matching_key
子程序。你找出兩個單獨的鍵匹配的內容,並填寫詳細信息。
順便說一下,根據您的示例數據,空成員來到非空元素之後。如果這總是一個真實的條件,則不需要將讀取循環與合併循環分開。不幸的是,你沒有說這是否是真的。
也沒有,你是否指定我是否必須按照讀入的順序打印數組。我可以保存一個鍵列表,並保持它們的順序。我沒有,因爲它會使邏輯複雜化,而你沒有指定它。
請注意您的問題的排名較低,以及人們將其標記爲關閉的事實。這是因爲你基本上說:「我有這個問題,爲我解決」。您也沒有提供足夠的解決方案細節。正如我所說,你談到匹配鍵,但沒有具體說明你的意思。
[你有什麼嘗試?](http://whathaveyoutried.com) – Leri 2012-08-17 09:22:34
在第一個「_」之前總會有「i」,如果沒有「_」?可以用文字解釋你的搜索模式嗎? – tuxtimo 2012-08-17 09:32:49
@ tuxtimo:是的,他們將永遠是「我」與沒有價值的鑰匙附加。所以我想要隨着價值一起出現的鑰匙一起搜索我。 – unkaitha 2012-08-17 09:37:48