首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >list<rectangle[]>数组分组

list<rectangle[]>数组分组
EN

Stack Overflow用户
提问于 2011-06-30 15:46:03
回答 2查看 1.2K关注 0票数 0

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

EN

回答 2

Stack Overflow用户

发布于 2011-06-30 15:54:19

如果可以重写矩形上的Equals以确定何时将两个矩形视为相等,则可以执行以下Linq查询。

代码语言:javascript
复制
        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);
        }

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

代码语言:javascript
复制
class RectangleGroup
{
    public Rectangle Value { get; set; }
    public int Count { get; set; }
}

然后像这样选择:

代码语言:javascript
复制
select new RectangleGroup() { Count = gr.Count(), Value = gr.Key }
票数 2
EN

Stack Overflow用户

发布于 2011-06-30 15:49:57

您可以使用Tuple:

代码语言:javascript
复制
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);
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6531538

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档