Hello,
I’m not getting why these two scripts give two different results?
Thanks!
In the first one collection is a list and in the for loop you are iterating over the numbers that exist in collection.
Whereas in the bottom one, x is itself a list which you put into another list. In other words you are making a list of list.
To elaborate on what @HossZamani said:
The for
loops, to me at least, are a little bit strange with how they handle their input.
If you say for (i in k)
, with k for example being 4, it’ll essentially go “if k contains i, do the thing”, meaning that it’ll increment i until i == k, but it does iterate and as a result you’ll get nulls for the intermediate values, i.e. [null,null,null,null,4]
.
Then, if you tell it to do the same but for (i in 0..k)
, it’ll work neatly.
Sort of.
Saying for (i in 2..k)
will result in two leading nulls before working at 2,3,…,k.
In my opinion, for
-loops don’t behave very nicely in this regard. They’re a bit more difficult to predict and they don’t always handle their input as you’d expect.
An alternative solution is using the following:
k=4; i=2; while (i <= k) {do_a_thing(); i = i+1;}
It gives you a lot more control over the way it iterates, including non-integer stepsize, with the trade-off that you really have to manually control it:. If you forget to add the i = i+n;
-bit, it’ll loop forever, forcing you to force-close Dynamo and potentially lose work…
Which approach is best ultimately depends on what you’re looking to accomplish, but to me with a background in C, the DS for-loops are a nightmare to deal with
I think you got his wrong. The CodeBlock will search for the values in k but will only find the value 4. Thus, i will only take the value 4. The null values are here because of output[i] = i;
: you did not specify the values for output[0],output[1],output[2
] and output[3]
so null
values are stocked there.
Regarding this and what I said earlier, you could totally do something like :
(so with no null values at the beginning of your list).
Ah, right, that makes a lot more sense
I was admittedly wondering how it was determining what to do with the lower values but of course the list would start at [0] regardless of what part we’re interested in.
You’re right, I hadn’t considered you’d then also need to offset the index of the output… The more you know!
Still not a fan of the for-loop syntax, but I admit it’s a bit more sensible than I gave it credit for.
Although @HossZamani already answered the question, the loop in your graph isn’t necessary, as you can simply do the following :
x = [0..10..#5];
point = Point.ByCoordinates(x);
and get the result you want. But your problem is more of a general problem and this is but an example probably…
Thanks @mellouze for elaborating this. now it is making more sense to me.
Yeah i made this for not any actual purpose but as an example.
thanks for all the helps.
Thanks @HossZamani and @Avz.