對於我正在使用的網站,我使用庫來獲取狀態列表。它返回一個數字索引的狀態數組,每個狀態都有三個鍵:stateCode,stateName和stateSeg。它看起來像這樣:比多維數組上的迭代搜索更好的數據結構或算法來查找相應的值?
array
0 => &
array
'stateCode' => string 'AL' (length=2)
'stateName' => string 'Alabama' (length=7)
'stateSeg' => string 'alabama-al' (length=10)
1 => &
array
'stateCode' => string 'AK' (length=2)
'stateName' => string 'Alaska' (length=6)
'stateSeg' => string 'alaska-ak' (length=9)
2 => &
array
'stateCode' => string 'AZ' (length=2)
'stateName' => string 'Arizona' (length=7)
'stateSeg' => string 'arizona-az' (length=10)
我經常發現自己有三個值之一,需要查找其相應的值。要做到這一點,我發現自己必須不斷遍歷狀態數組來查找我需要的數據。像這樣:
foreach ($this->data['stateList'] as $state)
{
if ($state['stateCode'] == $searchParams['state'])
{
$stateSeg = $state['stateSeg'];
break;
}
}
$url = BASEURL . '/' . $stateSeg . ".html";
這對我來說似乎沒有效率。我認爲我已經能夠提出的最有效的解決方案是將狀態轉換爲對象,並將它們放在數組中,併爲stateCode,stateSeg和stateName指定多個鍵,每個鍵指向同一個狀態對象,因此可以像引用它們一樣這樣的:
stateList[‘CA’]->getStateSeg();
或
stateList[‘Arizona’]->getStateCode();
或
stateList[‘alaska-ak’]->getStateName();
等等
這也看起來像是一種破解,它會導致使用複製數據(密鑰複製存儲在對象中的數據)的相當大的數組(150個密鑰指向50個對象)。
總之,只要想到我會看看是否有某種模式對於這種類型的問題。這種狀態數組並不是我遇到過的唯一的事情,我必須在多維數組上進行這種迭代搜索才能找到相應的值。
問題標籤爲PHP和上面的代碼是在PHP中,但我感興趣的是在任何語言優雅的解決方案。
雖然線性搜索並不是特別有效,但在這樣一個小桌子上應該足夠快,這取決於你打電話的頻率。如果你每秒沒有觸及數百次,那麼你會浪費你的時間來優化它。 –
如果你想優化這個,那麼你需要交換一些東西來獲得別的東西。線性搜索的內存效率很高,但速度很慢。你建議的另一個解決方案,有3個鍵指向相同的對象是一個很好的解決方案,但你交易一些內存,以減少獲得所需數據的步驟數。所以是的,你會創建3個數組,每個指向一個對象。 – Furicane
使用一些DBMS .... – gd1