我有一个 C# 列表,其中每个子列表都有三个 double ,代表一个 3D 点:
{{x1, y1, z1},
{x2, y2, z2},
{x3, y3, z3}}
我想找到该数据集的 3D 边界框,这意味着找到最小 X、最大 X、最小 Y、最大 Y 等。
使用 Python/Numpy,我可以使用 zmax = list_of_lists[:,2].max() 等来获得它。
在 C# 中是否有一种优雅的方法可以做到这一点?我怀疑 Linq 是可行的方法,但我还不明白它是如何工作的(如果某个答案包括 Linq,请解释它是如何工作的,请:o)
最佳答案
像这样创建列表,如果您需要更多功能,可以使用 3D 点的特定类而不是元组。
var points = new[] {
Tuple.Create(x1, y1, z1),
Tuple.Create(x2, y3, z2),
Tuple.Create(x3, y3, z3)
};
然后,就像@dasblinkenlight所写的那样,您可以使用linq来选择Max()
或Min()
:
var maxX = points.Select(pt => pt.Item1).Max();
或者更短:
var maxX = points.Max(pt => pt.Item1);
编辑:一个易于使用的简单类:
class Point3D {
public double X { get; set; }
public double Y { get; set; }
public double Z { get; set; }
public Point3D(double x, double y, double z) {
this.X = x;
this.Y = y;
this.Z = z;
}
}
var points = new[] {
new Point3D(x1, y1, z1),
new Point3D(x2, y3, z2),
new Point3D(x3, y3, z3)
};
var maxX = points.Max(pt => pt.X);
关于c# - 在 C# 中查找列表列表中第 N 个元素的最大值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15789403/