.net 装运箱尺寸查找最大侧和最小尺寸

vsikbqxv  于 2023-01-10  发布在  .NET
关注(0)|答案(3)|浏览(130)

我正在做一些航运计算。我需要一些帮助试图弄清楚这一点。基本上,我有一个通用的产品列表与长度,宽度和高度属性。
我想轻松地查看产品,找到所有三个属性的最大值。从这里,我可以做一些数学运算,根据产品的#计算出盒子的大小。
我最初的想法是做3个数组,并找到每个数组的最大值。只是想看看是否有一个更简单或更酷的方法,我不知道。

vm0i2vca

vm0i2vca1#

听起来像数组的数组。当你从数据源(SQL Server,XML等)读取每个元素(框)时,创建一个3成员数组,并按大小顺序插入属性。然后,将这个3成员数组添加到数组的数组中。然后,你可以使用LINQ或其他函数按第一个,第二个或第三个成员对数组的数组进行排序。

Box1,2,2,3
Box2,5,10,1
Box3,8,4,7

变成:

{  {10,5,1},  {8,7,4},  {3,2,2}  } // First

{  {8,7,4},  {10,5,1},  {3,2,2}  } // Second

{  {8,7,4},  {3,2,2},  {10,5,1}  } // Third

然后,可以按第一个元素、第二个元素等对数组进行排序。
使用LINQ可以在单个语句中轻松地生成数组的数组,但具体的生成方式取决于数据源。假设您有一个名为Box的类,该类具有三个参数LengthWidthHeight,并且您已创建了一个包含此类示例的强类型集合:

class BoxSorter {

    public IEnumerable<Box> Boxes {
        get;
        private set;
    }

    class Box {
        public double Height {
            get;
            set;
        }

        public double Width {
            get;
            set;
        }

        public double Length {
            get;
            set;
        }
    }

    public void Initialize() {

        this.Boxes = new List<Box>( new Box[] { 
            new Box() { Height = 2, Length = 2, Width = 3 },
            new Box() { Height = 5, Length = 10, Width = 1 },
            new Box() { Height = 8, Length = 4, Width = 7 }
        } );

    }

    public void Sort() {

        var l_arrayOfArrays =
            this.Boxes.Select(
            // Create an array of the Height, Length and Width, then sort the array elements (largest to smallest)
                b => new double[] { b.Height, b.Length, b.Width }.OrderByDescending( v => v ).ToArray()
            );

        var l_dimension1 =
            l_arrayOfArrays.OrderByDescending(
            // Sort the array of arrays by the first (and largest) dimension
                a => a[0]
            );

        var l_dimension2 =
            l_arrayOfArrays.OrderByDescending(
            // Sort the array of arrays by the second (and middle) dimension
                a => a[1]
            );

        var l_dimension3 =
            l_arrayOfArrays.OrderByDescending(
            // Sort the array of arrays by the third (and smallest) dimension
                a => a[2]
            );

    }

}
bkhjykvo

bkhjykvo2#

你可能需要做的是有一套盒子尺寸,然后尝试将它们最佳地 Package 在一个或多个这种尺寸的盒子里。
This是用于2D情况的简单打包器,您可以将其扩展到3D。
你的算法看起来就像

foreach box in boxes (ordered by decreasing volume)
        while there are unpacked items
            if box has space
                pack item
            else
                box = another box of the same size

现在你可以决定如何处理最后一个盒子里未使用的空间--要么把它们都挑出来,试着用一个小一点的盒子,要么试着把所有的东西都装进各种尺寸的盒子里,然后选择盒子数量最少的组合。

r9f1avp5

r9f1avp53#

你真的很难找到三个数字的最小值、最大值和中间值吗?
将每列中最小的列当作只有两列是没有意义的
4乘4乘4
8 x 8 x 2
您可能会错误地得出最小值为4 x 4 x 2,最大值为8 x 8 x 4的结论。

double[] dimensions;

        dimensions = new double[] {8,7,7};
        Array.Sort(dimensions);
        System.Diagnostics.Debug.WriteLine(dimensions[0]);
        System.Diagnostics.Debug.WriteLine(dimensions[1]);
        System.Diagnostics.Debug.WriteLine(dimensions[2]);

        dimensions = new double[] { 7, 9, 8 };
        Array.Sort(dimensions);
        System.Diagnostics.Debug.WriteLine(dimensions[0]);
        System.Diagnostics.Debug.WriteLine(dimensions[1]);
        System.Diagnostics.Debug.WriteLine(dimensions[2]);

我同意anathonline的观点,如果你想要一个最佳的盒子大小和如何 Package 物品,这比简单的数学要复杂得多。

相关问题