如果所有元素都属于同一类型并且您感兴趣的属性被命名为 ,Z
那么您可以这样做:
var max = list_of_points.Max(p => p.Z);
在您的情况下,由于您似乎正在使用 a double[][]
,您可以这样做:
var max = list_of_lists.Max(p => p[0]);
所以完整的边界框将由两个点定义,如下所示:
var topLeft = new double[]
{
list_of_lists.Min(p => p[0]),
list_of_lists.Min(p => p[1]),
list_of_lists.Min(p => p[2])
};
var bottomRight = new double[]
{
list_of_lists.Max(p => p[0]),
list_of_lists.Max(p => p[1]),
list_of_lists.Max(p => p[2])
};
但是,这需要您通过列表进行 6 次传递(每个点的每个坐标一次)。您可以这样做以提高性能:
var topLeft = list_of_lists.Aggregate((s, p) => return double[] { Math.Min(s[0], p[0]), Math.Min(s[1], p[1]), Math.Min(s[2], p[2]) });
var bottomRight = list_of_lists.Aggregate((s, p) => return double[] { Math.Max(s[0], p[0]), Math.Max(s[1], p[1]), Math.Max(s[2], p[2]) });
这将只通过列表 2 次。
注意:可以使用相同的代码来完成,List<List<double>>
而不是在每个数组声明之后double[][]
简单地添加。.ToList()