セットアップ
サービスから返されるがList<Room>()
あります。リストは 10 秒ごとに更新され、部屋が追加および削除されます。
class Room
{
public int ID {get;set;}
}
私の仕事
これらの部屋を画面に表示するために、可変サイズのマトリックスのようなビューを用意しました。マトリックスが 3 x 3 セルの場合もあれば、4 x 2 または 5 x 1 の場合もあります。
部屋が配置されたスロット/セルを「覚える」方法が必要だったので、DataTable がそのオプションを提供してくれると思いました。
セルを格納するには、3 つの列を持つ DataTable を使用します。
- "列" (int)
- "行" (int)
- 「部屋」(ルーム)
したがって、2 x 4 のマトリックスがある場合、次のようになります。
コラム | 行 | 行 | 部屋 ------------------------------ 0 | 0 | 部屋[0] ------------------------------ 1 | 0 | 部屋[1] ------------------------------ 2 | 0 | 部屋[2] ------------------------------ 0 | 1 | 部屋[3] ------------------------------ 1 | 2 | 部屋[4] などなど…
この DataTable を取得したら、画面を更新して、各部屋が以前の位置に表示されることを確認できます。これはおそらく、よりスマートな方法で実現できます。
問題
List<Room>
ここで、matrix/DataTableを列挙して入力する必要があります。
セルよりも多くの部屋がある場合は0,0
、すべての部屋にセルが割り当てられるまで、(新しいマトリックスをレイヤーとして追加するなど) 位置からやり直す必要があります。
これまでのアプローチ
for(...)
次のようなループをいくつか試しました。
int totalTiles = area.TileColumns * area.TileRows;
int totalLayers = (int)Math.Ceiling((double)area.Rooms.Count / totalTiles);
for (int i = 0; i < totalLayers; i++)
{
for (int j = 0; j < area.TileRows; j++)
{
for (int k = 0; k < area.TileColumns; k++)
{
// This is going nowhere :-(
}
}
}
私の脳内
この問題に最初に遭遇したとき、私はすぐに「単純な LINQ クエリで解決できないことは何もない!」と思いました。. そして、私はレンガを作りました...
このマトリックスを満たすための最も効率的/最高のパフォーマンスのアプローチは何ですか?