看起來很簡單,我想到了它的大部分。但是看到perl語法鬆散,對於新來者來說很難跳到:)試圖理解這個perl腳本
my @unique =();
my %seen =();
foreach my $elem (@array) {
next if $seen{ $elem }++;
push @unique, $elem;
}
這是來自perldoc網站。如果我理解正確的話,也可以寫爲:
my @unique =();
my %seen =();
my $elem;
foreach $elem (@array) {
if ($seen{ $elem }++) {
next;
}
push (@unique, $elem);
}
所以我在這一點上的認識是:
- 聲明一個名爲獨特的數組
- 聲明名爲看到
- 申報哈希一個名爲elem的變量
- 迭代@array,每次迭代都存儲在$ elem中
- 如果$ elem是散列中的一個鍵%看到(我不知道是什麼
++
一樣),跳到下一個迭代 - 追加$ ELEM到@unique
末我失去了兩兩件事:
- 當是否有任何內容以%顯示?
- 什麼++做(在它增加所有其他語言,但我沒有看到它是如何工作)
我知道,問題在於這部分:
$seen{ $elem }++
我懷疑正在做一堆不同的東西。是否有更簡單更詳細的寫作方式?
感謝您的幫助
啊我覺得有什麼可疑的。編寫具有大量自動版本的代碼是否是一種好的做法?還是長時間寫出來更好? – n0pe
@MaxMackie:在自動編寫代碼時沒有任何問題 - 它被編碼到Perl中的原因是因爲Larry Wall知道這是一個有用的模式。一旦你意識到了這一點,這很有道理。在這樣的代碼中,你只是對散列值進行數字運算,所以將散列中的值視爲從0開始就是合理的。你只是檢查真值(非零),從不檢查因此這是一個好的假設,它可以讓你簡化你的代碼。 –
完美,謝謝你的幫助。我會在2分鐘內接受。 – n0pe