2012-01-24 68 views
2

我在Matlab做字符串處理和我通常使用單元陣列到各個單詞存儲在文本線性時查找字符串數組

實施例:

a = {'this', 'is', 'an', 'array', 'of', 'strings'} 

用於搜索「的」字在這個數組中,我遍歷數組並檢查每個單獨的元素是否與我的單詞相對。這種方法不能縮放,因爲如果我得到一個大型的數據集,我的數組a會變大並且循環遍歷元素不是明智的。我想知道是否還有更聰明的方法,或許是Matlab中更好的本地數據結構,可以幫助我更快地運行它?

+2

有關讀取HTTP ://blogs.mathworks.com/loren/200 6/12/20 /發現字符串/ – oleksii

+0

可能的重複http://stackoverflow.com/questions/983163/map-function-in-matlab/983239#983239 –

回答

3

A map container是一種選擇。我不知道你打算做什麼特定類型的字符串處理,但這裏是一個例子,說明如何將每個字符串存儲爲一個與該單詞的索引位置向量相關聯的關鍵字:

a = {'this', 'is', 'an', 'array', 'of', 'strings', 'this', 'is'}; 

strMap = containers.Map(); %# Create container 
for index = 1:numel(a)  %# Loop over words to add 
    word = a{index}; 
    if strMap.isKey(word) 
     strMap(word) = [strMap(word) index]; %# Add to an existing key 
    else 
     strMap(word) = index; %# Make a new key 
    end 
end 

然後,您可以得到一個字的索引位置:

>> indices = strMap('this') 

indices = 

    1  7 %# Cells 1 and 7 contain 'this' 

或檢查的單元陣列中存​​在一個字(即,如果它是一個關鍵):

>> strMap.isKey('and') 

ans = 

    0 %# 'and' is not present in the cell array