我有一个矩形元素数组。数组中的每个元素都可以表示其中的几个不同的矩形。我想知道如何对类似的列表项进行分组并显示其计数。例如,该列表包含10个矩形阵列。 10个有4个相似的元素(即4个矩形元素,其中包含相同数量,大小,矩形的方向),例如我希望得到一个最终结果,显示7个alements列表和计数例如。 6个单元素和第7个元素显示计数为4. c#或vb.net
答案 0 :(得分:2)
如果您可以覆盖矩形上的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 }
答案 1 :(得分:0)
你可以使用元组:
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);
}