我在閱讀有序文件,必須按小時,按分鐘或按秒發生次數。如果要求,我必須打印出現0次(標準化輸出)的時間或跳過它們(非標準化輸出)。輸出必須顯然是有序的。迭代Perl數組的最有效方法是什麼?
我首先想到了使用數組。當輸出是非標準化的,我做的大致等價的:
@array[10] = 100;
@array[10000] = 10000;
並打印結果:
foreach (@array) {
print if defined;
}
是否有減少迭代只在陣列中定義的元素的方法嗎?在前面的例子中,這意味着只做兩次迭代,而不是使用$#array
。然後我還需要一種方法來了解循環中當前的數組索引。這樣的事情存在嗎?
我想越來越多地使用散列代替。使用散列可以解決我的問題,並且不需要將hh:mm:ss時間轉換爲索引,反之亦然。
或者你有更好的解決方案來建議這個簡單的問題?
哈希確實是你在這種情況下所需要的。 – Benoit
當「鍵」或「索引」範圍與有意義元素的數量(即稀疏結構)相比相對較大時,散列更適合。如果有意義元素的數量相對於指數範圍(密集結構)而言較高,並且計算指標的成本較低,則數組可以更省時,因爲它避免了哈希算法的開銷。 – DavidO
問題是,我想,爲什麼你首先使用數組?索引是你數據的一部分嗎?如果不是,爲什麼要打擾他們呢? – TLP