C# 列表<;矩形[]>;数组分组

C# 列表<;矩形[]>;数组分组,c#,C#,我有一个矩形元素数组。阵列中的每个元素都可以表示其中的几个不同矩形。我想了解如何对类似的列表项进行分组并显示它们的计数。e、 g该列表包含10个矩形数组。在这10个元素中,有4个元素是相似的(即4个具有相同数量、大小、矩形方向的矩形元素)。例如,我希望最终结果显示7个元素的列表和计数,例如,6个单个元素和第7个元素显示计数为4。c#或vb.net您可以使用元组: List<Rectangle> l = new List<Rectangle>(); l.Add(new Re

我有一个矩形元素数组。阵列中的每个元素都可以表示其中的几个不同矩形。我想了解如何对类似的列表项进行分组并显示它们的计数。e、 g该列表包含10个矩形数组。在这10个元素中,有4个元素是相似的(即4个具有相同数量、大小、矩形方向的矩形元素)。例如,我希望最终结果显示7个元素的列表和计数,例如,6个单个元素和第7个元素显示计数为4。c#或vb.net

您可以使用元组:

List<Rectangle> l = new List<Rectangle>();
l.Add(new Rectangle(1, 2, 3, 4));
l.Add(new Rectangle(1, 2, 3, 4));
l.Add(new Rectangle(10, 20, 30, 40));

var grouped = l
    .GroupBy(item => item)
    .Select(group => new Tuple<Rectangle, int>(group.Key, group.Count()));

foreach (var t in grouped)
{
    Console.WriteLine("There are {0} rectangles like {1}.", t.Item2, t.Item1);
}
List l=新列表();
l、 添加(新矩形(1,2,3,4));
l、 添加(新矩形(1,2,3,4));
l、 添加(新矩形(10,20,30,40));
var=l
.GroupBy(项=>项)
.Select(group=>newtuple(group.Key,group.Count());
foreach(分组中的变量t)
{
WriteLine(“有{0}个矩形,如{1}.”,t.Item2,t.Item1);
}

< /代码> 如果您可以在矩形上重写<代码>等值,以确定当考虑两个矩形相等时,可以执行以下LINQ查询。

        List<Rectangle[]> rectangleArr;
        var query = (from r in rectangleArr.Cast<Rectangle>()
                     group r by r into gr
                     select new { Count = gr.Count(), Value = gr.Key });
        foreach (var item in query)
        {
            Console.WriteLine("Item: {0}, Count: {1}", item.Value, item.Count);
        }
然后像这样选择:

select new RectangleGroup() { Count = gr.Count(), Value = gr.Key }

如果
矩形
是一个
结构
,那么就不需要重写
Equals
。看起来可能有点误解。这是我的设想。。。。List allsolution=new List();这是一个矩形数组列表。现在每个数组可以包含任意多个矩形…我只想将相似的矩形数组分组,并说明它们出现的次数…您的解决方案是在矩形数组中进行检查,然后将它们分组。//用于保存最终解决方案列表的变量allsheetsgrouped=new list//获取图纸解决方案矩形[x]图纸=新矩形[x];添加(矩形)//将矩形添加到图纸中//工作表完成后,会将其添加到最终解决方案变量中。所有图纸分组。添加(图纸);//当我的打包算法完成时。我有一份最后的清单和所有的工作表。我只想把类似的表格分组。i、 e.u不能仅仅用长度或计数来分组,因为纸张可以有相同数量的矩形,但大小不同。我不是用长度或计数来分组,而是用数值来确定相等的矩形。你似乎有需要更复杂比较的需求,你需要为“相似矩形”做一个正式定义。一个电路板切割解决方案,比如一张纸只能是10米*10米。然后在那张纸里,我会尝试在木板上剪下完美或接近完美的部分。如果我的最终解决方案有,假设需要4张。第一张纸包含100*1m*1m的切割,第二张有相同的切割,第三张只有2 5m*10m的切割,最后一张只有1 9m*9m的切割……在这种情况下,第一张和第二张纸包含类似的内容。我在这里有点迷茫……假设我有一个名为rects的列表,我如何使用上述代码实现它看起来可能有点误解。这是我的设想。。。。List allsolution=new List();这是一个矩形数组列表。现在,每个阵列可以包含尽可能多的矩形…我只想将相似的矩形阵列分组,并说明它们出现的次数…您的解决方案是在矩形阵列中进行检查,然后将它们分组。定义“相似的矩形阵列”这是一种电路板切割解决方案,假设一张图纸只能是10m*10m。然后在那张纸里,我会尝试在木板上剪下完美或接近完美的部分。如果我的最终解决方案有,假设需要4张。第一张表包含100*1m*1m的切口,第二张表有相同的切口,第三张表只有2个5m*10m的切口,最后一张表只有1个9m*9m的切口……在这种情况下,第一张表和第二张表包含类似的内容//用于保存最终解决方案列表的变量AllSheetsGroup=新列表//获取图纸解决方案矩形[x]图纸=新矩形[x];添加(矩形)//将矩形添加到图纸中//工作表完成后,会将其添加到最终解决方案变量中。所有图纸分组。添加(图纸);//当我的打包算法完成时。我有一份最后的清单和所有的工作表。我只想把类似的表格分组。i、 e.u不能只使用长度或计数来分组,因为板材可以有相同数量的矩形,但尺寸不同。
select new RectangleGroup() { Count = gr.Count(), Value = gr.Key }