使用for循环将字符串变量赋值给数组

Assign string variable to array using for loop

本文关键字:赋值 数组 变量 字符串 for 循环 使用      更新时间:2023-09-26

我有一个字符串变量列表,我想把所有这些变量赋值给一个数组,但是这个列表太多了,我是否可以使用for循环来赋值它

var class_1 = "some description..";
var class_2 = "some description..";
var class_3 = "some description..";
var class_4 = "some description..";
var class_5 = "some description..";
.
. 
var class_100 = "some description..";
var classes = [];
for(var i = 0; i < 100; i++){
 //loop string variables to array    
}

我认为这是不可能的,我分配100个变量手动数组。有人知道什么技巧吗?谢谢你。

[UPDATE]它需要SystemVerilog语法,因为我不熟悉这种语言,所以我在Javascript中呈现这个想法。

在SystemVerilog中,如果不手动将每个变量分配给数组的一个元素,则无法从独立命名的变量列表中构建值数组。

classes[0] = class_0;
classes[1] = class_1;
classes[2] = class_2;
...

用于变量名的标识符具有数字序列这一事实无关紧要,因为除非通过确切的名称,否则无法访问标识符。
如果您希望自动化此操作,则需要更改字符串变量的定义方式。正如人们已经发布的,这应该使用一个数组开始建模,也许使用一个关联数组:

string classes[string];
classes["class_1"] = "some description..";
classes["class_2"] = "some description..";
classes["class_3"] = "some description..";
foreach(classes[name])
       // do something with classes[name]

另一个选择是为每个变量使用SystemVerilog类对象

class stringvar;
  string m_name;
  static stringvar list[$];
  function new(string name);
    m_name = name;
    list.push_back(this);
  endfunction 
endclass
stringvar class_0 = new("some description..");
stringvar class_1 = new("some description..");
stringvar class_2 = new("some description..");
...
foreach(stringvar::list[item])
   // do something with item.m_name

像这样:

var class_1 = "some description..";
var class_2 = "some description..";
var class_3 = "some description..";
var class_4 = "some description..";
var class_5 = "some description..";
var class_100 = "some description..";
var classes = [];
for(var i = 0; i < 100; i++){
 classes.push(window['class_'+i])
}

你有100个变量?你应该先把它整理好

我认为那个评论有一定的道理。但是要回答您的问题:假设您的变量遵循与上面示例相同的命名约定,您可以用数组值为预定义变量赋值,如下所示:
var a = []
for(var i = 0; i < num_vars; i++){
    var key = 'class_' + (i + 1)
    if (this[key])
        a.push(this[key])
}

您也许可以使用eval。像这样:

for (var i = 0; i < 100; i++) {
    var toEval = "classes.push(class_" + i + ")";
    eval(toEval);
}