簡體   English   中英

從 c# 錯誤中的列表操作點獲取唯一值

[英]get unique values from a list op points in c# error

我有一個簡單的 class 點

public class point
{
    private double X;
    private double Y;
    public double x
    {
        get { return X; }
        set { X = value; }
    }
    public double y
    {
        get { return Y; }
        set { Y = value; }
    }
    public point() { }
    public point(double _x , double _y)
    {
        x = _x;
        y = _y;
    }
}

我正在嘗試使用此循環來獲取唯一值

        for (int i = 0; i < dim.Count; i++)
        {
            if (dimO[i].x == dim[i].x && dimO[i].y == dim[i].y)
            {
                continue;
            }
            else
            {
                dimO.Add(dim[i]);

            }
        }

但我得到了一個“超出索引”異常..這里有什么問題?

如果你想通過xy比較一個點,你應該覆蓋EqualsGetHashCode

public override bool Equals(object obj)
{
    var point2 = obj as Point;
    return point2 != null && point2.x == x && point2.y == y;
}

public override int GetHashCode()
{
   unchecked // Overflow is fine, just wrap
   {
       int hash = 17;
       // Suitable nullity checks etc, of course :)
       hash = hash * 23 + X.GetHashCode();
       hash = hash * 23 + Y.GetHashCode();
       return hash;
   }
}

我在這里取 hash 代碼 function 。

現在你可以通過使用獲得一個獨特點列表

var dim0 = (new HashSet(dim)).ToList();

// linq
var dim0 = dim.Distinct().ToList(); 

或者如果你想使用for循環

var dim0 = new List<Point>();
foreach(var p in dim){
    if(!dim0.Contains(p)){
        dim0.Add(p);
    }
}

您的解決方案不起作用,因為dim0最初沒有任何意義。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM