使用LINQ

时间:2016-05-28 22:41:18

标签: c# linq list

我有一个Point类的列表。

其中两个点在列表中只重复一次,其余的重复两次。

如何使用LINQ找到重复一次的点?

3 个答案:

答案 0 :(得分:1)

此解决方案将相同的点组合在一起,允许您查找只有一个成员的组,并返回该成员。

我还没有检查过实际的运行时,但是很有可能它在性能方面比在Where中运行Count()操作的解决方案更好,因为那可能会在O(n ^)运行2)时间,而GroupBy实现可能更优雅。

For Each cell In Intersect(Worksheets("Registration").Range("B:B").Cells,Worksheets("Registration").UsedRange)

答案 1 :(得分:0)

试试这个:

var result = points.Where(p1 => points.Count(p2 => p1.Contains(p2)) == 1);

答案 2 :(得分:0)

using System;
using System.Collections.Generic;
using System.Linq;

class Point
{
    int x, y;
    public Point(int x, int y)
    {
        this.x = x;
        this.y = y;
    }
    public int X
    {
        get { return x; }
        set { x = value; }
    }
    public int Y
    {
        get { return y; }
        set { y = value; }
    }
}
class Test
{
    static void Main()
    {
        var collection = new List<Point>
        {
            new Point(1,1),
            new Point(1,2),
            new Point(1,1),
            new Point(1,2),
            new Point(3,3),
            new Point(4,5),
        };
        var result = collection.Where(a => collection.Count(b => b.X == a.X && b.Y == a.Y) == 1);
        foreach (var val in result)
            Console.WriteLine(val.X + "," + val.Y);
    }
}
//output:
3,3
4,5