using System.Collections.Generic;
public static void Main()
var vs = new List<Vertex>
new Vertex { X = 1, Z = 1, Y = 3 },
new Vertex { X = 1, Z = 1, Y = 2 },
new Vertex { X = 1, Z = 1, Y = 6 },
new Vertex { X = 1, Z = 2, Y = 1 },
new Vertex { X = 2, Z = 1, Y = 1 },
new Vertex { X = 1, Z = 2, Y = 3 }
var vGroups = vs.AsParallel().GroupBy(vertex => new { vertex.X, vertex.Z });
foreach (var vGroup in vGroups)
vGroup.Aggregate((prev, curr) =>
curr.Y = prev?.Y ?? curr.Y;
FiddleHelper.WriteTable(vs);
public int X { get; set; }
public int Y { get; set; }
public int Z { get; set; }