資料型別(5) 關聯陣列

2021-10-23 17:36:36 字數 2589 閱讀 7810

作用:建立乙個更加靈活的陣列。類似於字典。也就是說,關聯陣列可以儲存任何型別的資料,也可以使用任何資料型別作為索引。(類似字典的鍵值對),因為任何資料型別都可以作為其索引值,所以其索引值可以是不連續的

例子:

bit [63:0] assoc [int], idx = 1;
理解:也就是理解關聯資料的鍵值對,儲存值是bit型,位寬為63bit大小,索引值是int型,儲存方式:問題(1):索引值是int型,可以不連續,那麼該如何對關聯資料進行遍歷?可通過foreach進行遍歷

foreach ( assoc[i] )

$display( 「assoc[%h] = %h」 , i , assoc[i] );

問題(1):其索引是否有序?顯然字典是無序的。關聯資料中存放第乙個資料的地方,跟索引值的大小沒關係。

1num()方法

定義:num()方法返回聯合陣列中條目的數目。如果陣列是空陣列,那麼它返回 0。

int imem[*];                                //其索引值為任意型別

imem[2'b3] = 1;

imem[16'hffff] = 2;

imem[4'b1000] = 3;

$display("%0d entries\n", imem.num); // 列印"3 entries"

2delete()方法

定義:指定索引值,並刪除。

int map[string];

map["hello"] = 1;

map["sad"] = 2;

map["world"] = 3;

map.delete("sad"); // 從"map"中刪除索引為"sad"的條目

map.delete; // 刪除聯合陣列"map"中的所有條目

3exists()方法

定義:判斷關聯資料中是否有指定索引的元素,如果元素存在則返回 1,否則返回 0。

if (map.exists("hello"))

map["hello"] += 1;

else

map["hello"] = 0;

4first()方法

定義:返回第乙個陣列元素的索引值,如果陣列是空的則返回 0,否則返回 1。

string s;

if (map.first(s))

$display("first entry is : map[%s] = %0d\n", s, map[s]);

5last()方法

定義:返回最後乙個陣列元素的索引值,如果陣列是空的則返回 0,否則返回 1。

string s;

if (map.last(s))

$display("last entry is : map[%s] = %0d\n", s, map[s]);

6next()方法

定義:返回下乙個陣列元素的索引值,如果陣列是空的則返回 0,否則返回 1。這個不好理解,注意有第乙個,才會有下乙個。,如果第乙個不為 0,那麼可判斷下乙個是不是 0

string s;

if (map.first(s)) begin

do$display("%s : %d\n", s, map[s]);

while (map.next(s));

end

關聯陣列也可以用字串索引進行定址,使用字串索引讀取檔案,並建立關聯陣列,可以實現字串到數字的對映。

sv在讀文字時,是一行一行讀取,那麼每讀一行,讀到的值就可以方法廣聯資料中,其索引為index即可。(比較好儲存讀到的字串資料)

實驗:將字串檔案當作索引,儲存到關聯陣列中。

檔案:結果:

table型別(關聯陣列)

定義乙個關聯陣列 type mytable is table of number index by varchar2 200 類似鍵值對 標準的定義語句 type type name is table of element type not null index by binary integer ...

1215 關聯陣列

一 陣列變數的限制 在前面講的陣列變數中,可以通過下標訪問其中的元素。例如,下列語句訪問陣列 array 的第三個元素 scalar array 2 雖然陣列很有用,但它們有乙個顯著缺陷,即很難記住哪個元素存貯的什麼內容。假如我們來寫乙個程式計算某檔案中首字母大寫的單詞出現的次數,用陣列來實現就比較...

9 3 關聯陣列

關聯陣列是bash 4.0新增的乙個特性。關聯陣列將值與索引連線 關聯 到一起,所以我們可以將元資料與實際資料關聯起來。使用這種方式可以將 家與他的樂器聯絡起來。關聯陣列必須以大寫的declare a命令來進行宣告。cat musicians.sh bin bash declare a beatle...