在列表中添加新值

时间:2017-02-22 10:01:34

标签: vex

我的VEX脚本有问题。 @是创建attributs而不是变量

f[]@myList; // create list attribut
float pavW = 0.0;
for( int i = 1 ; i < 11 ; i++){
    string path = "../widthPav" + itoa(i);
    pavW = ch(path); // take the value in the specific channel
    if (i == 1){
        push(@myList,pavW); //add new component of value to myList
    }
    if ( pavW > 0){
        foreach ( int j ; float value ; @myList){
            if ( pavW == value){
                break;
            }else{
                push(@myList,pavW); //add new component...
                break;
            }
        }
    }

}

我想添加&#39; pavW&#39;价值到&#39; myList&#39;如果&#39; pavW&#39;是'myList&#39;元素的不同之处。 结果不是例外。

1 个答案:

答案 0 :(得分:0)

foreach中,您只与array的第一个元素进行比较。对于其他元素,您的if条件会失败并继续添加到myList。您应该pusharray foreach区外。

名为unique的临时变量可用于触发push

f[]@myList; // create list attribut
float pavW = 0.0;
for (int i = 1; i < 11; i++)
{
    string path = "widthPav" + itoa(i);
    pavW = ch(path); // take the value in the specific channel
    if (i == 1)
    {
        push(@myList, pavW); //add new component of value to myList
    }
    if (pavW > 0)
    {
        int unique = 0;
        foreach (float value; @myList)
        {
            unique = 1;
            if (pavW == value)
            {
                unique = 0;
                break;
            }
        }
        if (unique)
            push(@myList, pavW); //add new component...
    }
}

<强>建议

  • 您不需要foreach中的索引。
  • 对于此类任务,只需创建一个备用parm并添加Python 表达式获取唯一widthPav parm的列表。

简单Python摘要:

node = hou.pwd()
parmsUniqueValue = []

[parmsUniqueValue.append(parm.eval()) for parm in node.parms() if parm.name().startswith('widthPav') if parm.eval() not in parmsUniqueValue]