【IEEE_SV-7.9】关联数组方法汇总

7.9 Associative array methods

除了索引操作符,还提供了几个内置的方法,允许用户分析和操作关联数组,以及迭代其索引或键。

7.9.1 Num() and size()

Num()和size()方法的语法如下:
function int num();
function int size();
Num()和size()方法返回关联数组中条目的数量。如果数组为空,则返回0。

int imem[int];
imem[ 3 ] = 1;
imem[ 16'hffff ] = 2;
imem[ 4'b1000 ] = 3;
$display( "%0d entries\n", imem.num ); // 打印"3 entries"

7.9.2 Delete()

delete()方法的语法如下:
function void delete( [input index] );
其中index是相关数组适当类型的可选索引。
如果指定了索引,则delete()方法将删除指定索引处的条目。如果要删除的条目不存在,该方法不会发出警告。
如果没有指定索引,则delete()方法将删除数组中的所有元素。

int map[ string ];
map[ "hello" ] = 1;
map[ "sad" ] = 2;
map[ "world" ] = 3;
map.delete( "sad" ); // 从map中删除索引为sad的项。
map.delete; // "从关联数组"map"中删除所有条目

7.9.3 Exists()

exists()方法的语法如下:
function int exists( input index );
其中index是相关数组的适当类型的索引。exists()函数的作用是:检查给定数组中指定索引处是否存在元素。如果元素存在,返回1;否则,返回0。

if ( map.exists( "hello" ))
map[ "hello" ] += 1;
else
map[ "hello" ] = 0;

7.9.4 First()

first()方法的语法如下:
function int first( ref index );
其中index是相关数组的适当类型的索引。不允许指定通配符索引类型的关联数组。first()方法将关联数组中第一个(最小)索引的值赋给给定的索引变量。如果数组为空,则返回0;否则,返回1。

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

7.9.5 Last()

last()方法的语法如下:
function int last( ref index );
其中index是相关数组的适当类型的索引。不允许指定通配符索引类型的关联数组。last()方法将关联数组中最后(最大)个索引的值赋给给定的索引变量。如果数组为空,则返回0;否则,返回1。

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

7.9.6 Next()

next()方法的语法如下:
function int next( ref index );
其中index是相关数组的适当类型的索引。不允许指定通配符索引类型的关联数组。next()方法查找值大于给定索引参数的最小索引。如果存在下一项,则将下一项的索引赋给索引变量,函数返回1。否则,索引不变,函数返回0。

string s;
if ( map.first( s ) )
do
$display( "%s : %d\n", s, map[ s ] );
while ( map.next( s ) );

7.9.7 Prev()

prev()方法的语法如下:
function int prev( ref index );
其中index是相关数组的适当类型的索引。不允许指定通配符索引类型的关联数组。查找值小于给定index参数的最大索引。如果存在前一个条目,则将前一个条目的索引赋给index变量,函数返回1。否则,索引不变,函数返回0。

string s;
if ( map.last( s ) )
do
  $display( "%s : %d\n", s, map[ s ] );
while ( map.prev( s ) ); 

7.9.8 Arguments to traversal methods

传递给四个关联数组遍历方法first()、last()、next()和prev()的参数必须与数组的索引类型相匹配。如果实参的整型小于对应数组索引类型的大小,则函数返回-1,并将其截断以适应实参。
例如:

string aa[int];
byte ix;
int status;
aa[ 1000 ] = "a";
status = aa.first( ix );
// status is –1
// ix is 232 (least significant 8 bits of 1000)

7.9.9 Associative array assignment

关联数组只能分配给另一个具有兼容类型和相同索引类型的关联数组。其他类型的数组不能分配给关联数组,关联数组也不能分配给其他类型的数组,无论是固定大小的还是动态的。
将一个关联数组分配给另一个关联数组会清除目标数组中的所有现有条目,然后将源数组中的每个条目复制到目标数组中。

7.9.10 Associative array arguments

关联数组只能作为参数传递给兼容类型和具有相同索引类型的关联数组。其他类型的数组,无论是固定大小的还是动态的,都不能传递给接受关联数组作为参数的子例程。同样,关联数组不能传递给接受其他类型数组的子例程。
按值传递关联数组会导致创建关联数组的本地副本。

7.9.11 Associative array literals

关联数组使用具有一个可选的默认索引的’{index:value}语法。与所有其他数组一样,关联数组可以一次写入一个条目,也可以使用数组字面量替换整个数组内容。
例子:

//一个由2态整数索引的字符串的关联数组,默认为“hello”。
string words [int] = '{default: "hello"};
// 由字符串索引的4个状态整数组成的关联数组,默认值为-1
integer tab [string] = '{"Peter":20, "Paul":22, "Mary":23, default:-1 };

如果指定了默认值,那么读取一个不存在的元素将产生指定的默认值,并且不会发出警告。否则返回表7-1(见7.4.6)所指定的值。
定义默认值不会影响关联数组方法的操作(参见7.9)。

  • 7
    点赞
  • 49
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值