2014-01-29 56 views
0

有誰知道如何將點值添加到數組?添加點數組

+1

難道你不能只使用一個點數組,然後在需要的時候將X和Y值轉換爲雙倍值? –

回答

2

爲什麼你想要的數組是double?你可以使用一個Point數組;

Point[] points = new Point[2]; 
points[0] = new Point(15,15); 
points[1] = new Point(200,220); 

double someResult = (points[0].x - points[1].x) * (points[0].y - points[1].y); 

或循環它們;

for (int i = 0; i < points.Lenght; i++) 
{ 
     // do something with points[i] 
} 

或者帶一個列表;

List<Point> points = new List<Point>(); 
points.Add(new Point(1,1)); //ect 

List<Point> points = new { new Point(1,1), new point(2,2) //ect }; 

foreach (Point p in points) 
{ 
    // do something with p 
} 

,你可能有利於通過循環一些隨機LINQ;

double xTotal = points.Aggregate((c, n) => c.x + n.y); // gives sum or all x values 
double yTotal = points.Aggregate((c, n) => c.y + n.y); 

當我添加兩個點到一個數組,這是否意味着該數組將保存4個值?

排序該陣列將保存兩個Point實例。每個人都有xy價值,但通常你會說數組持有2個值。如果你只是想組4雙打,你可能根本不想使用Point。你可以聲明一個結構像;

public struct Rect 
{ 
    double a; 
    double b; 
    double c; 
    double d; 
} 

,有你的4個雙打更很好地組合在一起。或者你可以使用Tuple<double, double, double, double>,雖然大多數開發者可能會覺得有點奇怪(嘿,我至少喜歡它們)。但是,它是隻讀的。

var tuple = new Tuple<double, double, double, double(1, 2, 3, 4); 
+0

@ user3213304數組包含兩個'Point','Point'每個都有一個'x'和一個'y',所以你有'array [0] .x'' array [0] .y'和'array [1] .x'和'array [1] .y'。你不會說數組有4個值,因爲它有2個點,每個點有2個值。你可以有任何類型的數組,這樣說數組有4個值,因爲每個點有兩個沒有意義。我可以有一個'File []'或一個'string []'或一個'double []'。數組中的項目數獨立於其包含的類型的屬性。 – evanmcdonnal

+0

@ user3213304也有一些循環的例子。我不知道你想如何繁殖這些值。如果你只是想應用這個方程式,你必須把所有的項目放在數組或列表中,是的,這很容易。但我認爲這樣做確實沒有意義,我需要更多解釋你想要完成的事情。 – evanmcdonnal

+0

謝謝,你解釋得很好。 – user3213304

0

我建議你來聲明一個類,那就是:

public class Rectangle 
{ 
    public Rectangle(Point left, Point right) 
    { 
     Left = left; 
     Right = right; 
    } 

    private Point Left{get; set;} 

    private Point Right{get; set;} 

    public double CalculateArea() 
    { 
     return (points[0].x - points[1].x) * (points[0].y - points[1].y); 
    } 

} 

這裏是你如何使用它:

var rec = new Rectangle(new Point(15,15), new Point(200,220)); 
var someResult = rec.CalculateArea(); 
0

一般來說,你會過得更好的重構你的程序使用Point數組,因爲它具有更多的語義含義。

但如果這是一個真正的矩形(不是任何四邊的形狀,你需要四點而不是兩個),你可以這樣做:

public double[] ConvertPointsToArray(Point topLeft, Point bottomRight) 
{ 
    var points = new double[4]; 
    points[0] = topLeft.x; 
    points[1] = topLeft.y; 
    points[2] = bottomRight.x; 
    points[3] = bottomRight.y; 
    return points; 
} 

然後你就可以使用這樣的陣列:

var points = ConvertPointsToArray(left, right); 
var value = (points[0] - points[2]) * (points[1] - points[3]); 

但正如你所看到的,你必須知道點是如何在陣列中的編碼,很容易陷入困境。

有兩個點的矩形類會更有用。