2

2 つのリストの X フィールドと Y フィールドを合計する必要がありますが、最初の Id は 2 番目の Id と同じです。

私のコード:

//Program.cs

//(...)

class Point
{
    public int Id { get; set; }
    public int X { get; set; }
    public int Y { get; set; }

    public Point(int _Id, int _X, int _Y)
    {
        Id = _Id;
        X = _X;
        Y = _Y;
    }
}

//(...)

List<Point> points = new List<Point>();
List<Point> sumsXY = new List<Point>();

//sum the X and Y of two lists, but points.Id must equal to sumsXY.Id
for (int i = 0; i < objcount; i++)
{
    sumsXY[points[i].Id].X = sumsXY[points[i].Id].X + points[i].X;
    sumsXY[points[i].Id].Y = sumsXY[points[i].Id].Y + points[i].Y;
}

助けが必要。

デビッド

4

3 に答える 3

1

このようなことはあなたのために働きますか:

List<Point> points = new List<Point>();
List<Point> sumsXY = new List<Point>();

points.Add(new Point(1, 10, 10));
points.Add(new Point(2, 10, 20));
points.Add(new Point(3, 10, 30));

sumsXY.Add(new Point(1, 100, 100));
sumsXY.Add(new Point(5, 10, 20));
sumsXY.Add(new Point(6, 10, 30));

foreach (Point p in points)
{
     foreach (Point s in sumsXY)
     {
         if (s.Id == p.Id)
         {
             s.X += p.X;
             s.Y += p.Y;
         }
     }
 }

与えます:

  • 110 110
  • 10 20
  • 10 30
于 2013-07-24T11:40:30.367 に答える
1

このようなものをお探しですか?

var sumsXY = points.GroupBy(x => x.Id)
                   .Select(g => new Point(g.Key, g.Sum(x => x.X),
                                          g.Sum(x => x.Y)))
                   .ToList();

これにより、同じ ID を持つすべてのポイントがグループ化され、グループごとに、そのグループの ID とグループ内のすべてのポイントの X 値と Y 値の合計を持つ新しいポイントが作成されます。

sumsXYこの回答は、この操作の開始時に空であると想定しています。そうでない場合は、質問を明確にし、入力例と予想される出力を提供することをお勧めします。

于 2013-07-24T11:27:57.347 に答える