Добавить новое значение в список
У меня проблема с этим скриптом VEX. @ - создавать атрибуты вместо переменных
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;
}
}
}
}
Я хочу добавить значение "pavW" в "myList", если "pavW" - это разные элементы "myList". результат не так исключен.
1 ответ
В foreach
вы сравниваете с первым элементом array
только. И для других элементов вашего if
условия не выполняется и продолжает добавлять к myList
, Вам следует push
к array
вне 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
, - Для такого рода задач просто создайте запасной парм и добавьте
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]