.net 装运箱尺寸可以找到最大的一面和最小的一面

.net 装运箱尺寸可以找到最大的一面和最小的一面,.net,arrays,shipping,.net,Arrays,Shipping,我正在做一些运输计算。我需要一些帮助来解决这个问题。 基本上,我有一个具有长度、宽度和高度属性的产品的通用列表 我想很容易地看看这些产品,并找到所有三个属性的最大值。 从这里,我可以做一些数学运算,并根据产品的种类计算出盒子的大小 我最初的想法是制作3个数组,并找出每个数组的最大值。只是想看看有没有一种更简单更酷的方式我不知道 谢谢 您可能需要做的是设置一组盒子大小,然后尝试将它们以最佳方式包装在一个或多个相同大小的盒子中 是一个简单的二维封隔器,您可以将其扩展到三维 你的算法看起来有点像

我正在做一些运输计算。我需要一些帮助来解决这个问题。 基本上,我有一个具有长度、宽度和高度属性的产品的通用列表

我想很容易地看看这些产品,并找到所有三个属性的最大值。 从这里,我可以做一些数学运算,并根据产品的种类计算出盒子的大小

我最初的想法是制作3个数组,并找出每个数组的最大值。只是想看看有没有一种更简单更酷的方式我不知道


谢谢

您可能需要做的是设置一组盒子大小,然后尝试将它们以最佳方式包装在一个或多个相同大小的盒子中

是一个简单的二维封隔器,您可以将其扩展到三维

你的算法看起来有点像

    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

现在,您可以决定如何处理最后一个框中未使用的空间-或者将它们全部挑选出来,然后尝试使用较小的框,或者尝试将所有项目打包到所有大小的框中,然后选择导致框数最少的组合。

您真的很难找到三个数字中的最小值、最大值和中间值吗

把每列中最小的一列当作只有两列是没有意义的 4x4x4 8 x 8 x 2 您可能会错误地得出最小值为4x4x2,最大值为8x8x4的结论

        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的观点,如果你想要一个最佳的盒子大小和如何包装物品,那么它比简单的数学要复杂得多。

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

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

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

然后,可以按第一个元素、第二个元素等对数组进行排序

您可以使用LINQ在一条语句中轻松构建一个数组数组,但具体实现方式取决于数据源。假设您有一个名为Box的类,该类有三个参数:长度、宽度和高度,并且您已经创建了一个包含此类实例的强类型集合:

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]
            );

    }

}

你会把多种尺寸的产品装进这个箱子吗?你们有固定尺寸的箱子吗?多个尺寸的产品,没有固定尺寸的箱子必须清楚,你们有一个产品列表,每个产品都有一个W X H X D,需要装运,你们想计算一个箱子尺寸,以便对它们进行最佳包装?如果没有盒子大小,这不是一个容易解决的问题,因为有无限的解决方案,例如,只需将它们首尾相连地放在一起,并制作一个盒子来覆盖它即可是的,但我试图找到最大值长度,即长度,找到最大宽度,即宽度,然后再加上高度。这样,当只运送小物品时,你会得到一个不必要的高箱子。最坏的情况是,如果你得到一个小项目的同质列表,你将需要一个非常高的框:。虽然这是非常琐碎的-我相信这不是OP需要解决他/她的问题。找到一组长方体的最优布局无论如何都不是一个简单的问题。@ananthonline好的,我承认最优长方体可能不是简单的。但这并不是一个明确的问题。从这里开始,我可以做一些数学运算,并根据产品的种类计算出盒子的大小。OP没有要求最佳的盒子大小。因此,我在原始帖子下的评论试图确定OP想要做什么,而不是他要求做什么。@ananthonline我的理论是他们可能想要一个看似错误的问题的答案。我曾经有人问过我的问题,而这正是我想问的问题。A同意你的意见。很抱歉耽搁了,这基本上就是我为解决问题所做的。我想我会把这个标记好让其他人知道。这个问题是一个噩梦,因为没有一个固定的盒子大小。我还必须为重量添加一个参数,并根据物品/箱子大小和重量进行调整。
{  {8,7,4},  {3,2,2},  {10,5,1}  } // Third
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]
            );

    }

}