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

本文关键字:数组 gt lt 矩形 列表 | 更新日期: 2023-09-27 18:00:40

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

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

如果可以覆盖矩形上的Equals以确定何时认为两个矩形相等,则可以执行以下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);
        }

如果你不想要匿名类型,你可以创建一个类:

class RectangleGroup
{
    public Rectangle Value { get; set; }
    public int Count { get; set; }
}

然后这样选择:

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

您可以使用Tuple:

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