LINQ is not working properly

Please help me.

LINQ is not working properly

The C# code you posted works fine for me.

No way to know where your error is since you didn’t post a grasshopper file.

3. Attach minimal versions of all the relevant files



Thanks Kevin!
Sorry, my English isn’t so good.

test.3dm (30.3 KB) (9.0 KB)

Here’s the file in question
please remember me

I believe @toolbox wants the numbers in your image that say 0, 5, 10, 15, 20 go 0, 1, 2, 3, 4.

This should do it.

List<Point3d> pt = Points.OrderBy(p => p.X).ThenBy(p => p.Y).ToList();

List<int> index_list = new List<int>();

for(int i = 0;i < Points.Count; i++) index_list.Add(i + 1);

P = pt;
I = index_list;

I simplified the provided GH a bit (put in a Point List to show native way for visualizing point indices without adding tags) (7.7 KB)

Thanks Nathan ‘jesterKing’ Letwory

If you examine your points closely, you can see why they are not sorting in the order you expect.

I have rounded the values to 6 decimal places here (points are not modified, only their sorting criteria): (19.7 KB)


Thank you Kevin!
That was very easy to understand!
Thank you so much.
It helped me a lot!!

It depends upon the “deviation” of your X/Y coords . That said Rounding IS NOT the answer for the general case: for that you’ll need another approach (a “special” GroupBy then an OrderBy).

See the challenge (set distort true) in the attached. (116.8 KB)

Thanks Pfotiad0

So … as a challenge (not very simple mind) try to mastermind Methods that deal with the general case (i.e. a “distorted” rnd order grid, that is).

Tip: Cluster X,Y coords values Lists according some “gap” and get the related Intervals Lists (meaning that a given pt should get an index i if the X/Y value is included in some Interval at pos i).

1 Like