原视频:https://www.youtube.com/playlist?list=PLzRzqTjuGIDhiXsP0hN3qBxAZ6lkVfGDI
Bili:Houdini最强VEX算法教程 - VEX for Algorithmic Design_哔哩哔哩_bilibili
Houdini版本:19.5
数组是相同类型的若干个有序排列的集合(容器)
1、数组声明与初始化
float fArray[] = {2.5, 1.4, 10.8};
string SArray[] = {'W', 'A', 'S', 'D'};
vector vArray[] = {{0, 1, 2},{3, 4, 5}};
2、 使用变量声明数组
数组使用大括号的同时,不能使用变量,使用变量声明初始化数组方法如下:
//使用 array() 函数
float fval = 2.5;
string sval = 'W';
vector vval = {0, 1, 2};
float fArray[] = array(fval, 1.4, 10.8);
string SArray[] = array(sval, 'A', 'S', 'D');
vector vArray[] = array(vval, {3, 4, 5});
3、数组和属性
在AttributesWrangle节点(detail)中运行以下代码,即可在表格中看到创建的数组属性值,两种方法结果相同:
float fArray[] = {2.5, 1.4, 10.8};
string sArray[] = {'W', 'A', 'S', 'D'};
vector vArray[] = {{0, 1, 2},{3, 4, 5}};
//方法一:快速
f[]@fval = fArray;
s[]@sArray = sArray;
v[]@vArray = vArray;
//方法二:可通过代码更改属性名称
setdetailattrib(0, 'fvals2', fArray);
setdetailattrib(0, 'svals2', sArray);
setdetailattrib(0, 'vvals2', vArray);
4、访问数组
创建一个<primitive>类型的小球Sphere,添加一个AttributeWrangle节点,以下代码通过索引访问数组:
float values[] = {1, 2, -3, 4};
int index = chi('index');
@P.x = values[index]; //滑动 index 通道即可移动小球,超过数组范围恢复默认位置
5、数组添加值
方法一:通过 push()函数添加数组
float values[];
push(values, 3.6);
push(values, 1.9);
float val = 8.4;
push(values, val);
//数组结果 [3.6, 1.9, 8.4]
方法二:通过 append 方法在已有数组属性末尾添加
float values[] = {1.4, 5.3, 6.3};
f[]@values= values;
setdetailattrib(0, 'values', 10.0, 'append');
//数组属性结果 [1.4, 5.3, 6.3, 10.0]
6、数组值删除
方法一:通过 pop() 函数删除数组最后一个值
float values[] = {2.3, 93, 34, 4.2};
pop(values);
//数组结果 [2.3, 93.0, 34.0]
方法二:通过removevalue()函数删除指定值,仅能删除匹配的第一个值
float values[] = {2.3, 93, 34, 4.2, 93.0};
removevalue(values, 93.0);
//数组结果 [2.3, 34.0, 4.2, 93.0]
方法三:通过 removeindex() 函数删除指定索引对应值
float values[] = {2.3, 93, 34, 4.2, 93.0};
removeindex(values, 4);//删除第五个值
//数组结果 [2.3, 93.0, 34.0, 4.2]
7、数组综合函数
eg.数组复制
float values[] = {2.3, 93, 34, 4.2, 93.0};
//方法一
float values2[] = values;
//方法二
float values3[] = set(values);
//两种方法结果相同,数组结果 [2.3, 93.0, 34.0, 4.2, 93.0]
上面两种方法结果相同,但是 set() 函数可以把向量或矩阵转换成浮点数
float values[] = {2.3, 93, 34, 4.2, 93.0};
vector vval = {2, 4, 6};
float values2[] = set(vval);
//数组结果为 [2.0, 4.0, 6.0]
8、数组长度
float values[] = {2.3, 93, 34, 4.2, 93.0};
int arrlen = len(values);
//数组长度结果为 5