加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – Linq解决方案,以获得最大数量的数组

发布时间:2020-12-16 02:01:33 所属栏目:百科 来源:网络整理
导读:有一个具有double [6]数组属性的对象作为其几何边界: "xmin: " bounds[0] "xmax: " bounds[1] "ymin: " bounds[2] "ymax: " bounds[3] "zmin: " bounds[4] "zmax: " bounds[5] 迭代几个对象并获取此属性 我想存储所有迭代对象的最大xmax,ymax,zmax值 什么是
有一个具有double [6]数组属性的对象作为其几何边界:

"xmin: " << bounds[0]  
 "xmax: " << bounds[1] 
 "ymin: " << bounds[2]  
 "ymax: " << bounds[3] 
 "zmin: " << bounds[4]  
 "zmax: " << bounds[5]

迭代几个对象并获取此属性
我想存储所有迭代对象的最大xmax,ymax,zmax值

什么是完成这项任务的最佳方式,我有这个想法,但我想使用Linq

double[] max = new double[6];
    double xmax = 0.0;
    double ymax = 0.0;
    double zmax = 0.0;
    foreach (var o in myObject)
    {
        max = o.bounds;
        if (xmax < max[1])
        {
            xmax = max[1];
        }
        if (ymax < max[3])
        {
            ymax = max[3];
        }
        if (zmax < max[5])
        {
            zmax = max[5];
        }
   }

解决方法

我会采用这种方法:

double xmax = myObject.Max(mo => mo.bounds[1]);
double ymax = myObject.Max(mo => mo.bounds[3]);
double zmax = myObject.Max(mo => mo.bounds[5]);

这会产生非常快速的结果.

如果你想使用linq只迭代一次枚举,那么就这样做:

var max = myObject
    .Select(mo => mo.bounds)
    .Aggregate(
        new { x = double.MinValue,y = double.MinValue,z = double.MinValue },(a,b) => new
        {
            x = Math.Max(a.x,b[1]),y = Math.Max(a.y,b[3]),z = Math.Max(a.z,b[5]),});

虽然这只是一次迭代,但我的测试显示它比第一种方法慢.第一种方法需要625ms,第二种方法需要705ms.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读