2015-11-23 40 views
0

我有一個有效載荷它的類型是字節列表字節的列表:的Specman:如何找到,如果在另一個列表中存在以列表的順序考慮

var payload : list of byte; 
payload= {1;2;3;4;5;6}; 

var item1 :list of byte; 
item = {3;4;5}; 


var item2 :list of byte; 
item = {1;4}; 

我想執行代碼它檢查列表是否是另一個列表的子列表。使用「if ..in ..」並不完全正常,因爲它沒有考慮到項目的順序,或者它們是否連續出現。我想要做以下事情:

  • if(item1 in payload)...... should return TRUE。物品以相同的順序存在於有效載荷中。

  • if(payload2中的item2)......應該返回FALSE,因爲雖然列表中的每個元素都存在於有效載荷中,但是item2元素不會連續出現在有效載荷列表中。

有沒有簡單的方法來實現這一目標?在specman中必須有一個build -in函數。

感謝

+0

實際上,'item2'中的順序也是一樣的('1'在'4之前,就像'payload'中一樣)。你可能不僅僅意味着訂單,而且還意味着連續出現的物品?請澄清你的問題。 –

+0

@YuriTsoglin我認爲他意味着他想檢查列表是否是更大列表的子列表。 –

+0

@YuriTsoglin是的,我想檢查他們連續出現的物品。謝謝 – bobesfanchi

回答

1

下面的代碼應該工作:

if (item.size()==0) {return TRUE}; 
for i from 0 to payload.size()-item.size() { 
    if (item == payload[i..i+item.size()-1]) { 
     return TRUE; 
    }; 
}; 
return FALSE; 

注意,該代碼是相當昂貴的存儲明智(名單[a..b]語法創建一個新的列表中的每個時間),所以如果你有內存方面的考慮,應該修改它。

相關問題