1

私は昔からのプログラマーなので、配列を乱用することに慣れていますが、辞書は動的に拡張でき、配列はできないため、辞書の使用を開始する必要があります。

今...私は、太陽系の各天体がおそらく約20〜30の異なる値を持つ太陽系の値を設定する必要があります。

私の意図は、各ボディが独自の一意のキーと値を持つ辞書を使用することでした...

Dictionary<int,string> BodyName = new Dictionary<int,string>()
Dictionary<int,int> BodySize = new Dictionary<int,int>()
Dictionary<int,int> BodyX = new Dictionary<int,int>()
Dictionary<int,int> BodyY = new Dictionary<int,int>()
Dictionary<int,int> BodyVelocity = new Dictionary<int,int>()

等...

私の質問は、これらすべての辞書から値を取得するための最良の方法は何ですか? 各 'body' のキーは各辞書で同じです。多くのループでこれを実行できることはわかっていますが、これは CPU サイクルをかなり無駄にしているようで、私にとっては悪いことです。

Dictionary,List も検討しましたが、特に気に入らない問題が他にもあります。

4

2 に答える 2

10

複合型を作成し、それを使用します。

キーが一意の識別子である場合、辞書に固執するのが適切です-惑星ID? 惑星名?- データの検索に使用する必要があります。辞書の反復は非決定論的であることを忘れないでください。

Dictionary<int,PlanetaryBody> Bodies = new Dictionary<int,PlanetaryBody>()

一方、惑星が繰り返される (または位置インデックスによってアクセスされる) だけの場合は、シーケンスが適しています。この場合、リストを使用するとうまくいくことがよくあります。

List<PlanetaryBody> Bodies = new List<PlanetaryBody>();
// Unlike arrays, Lists grows automatically! :D
Bodies.Add(new PlanetaryBody { .. }); 

(リストよりも配列を選択することはめったにありません。場合によっては良いこともありますが、頻繁ではありません。)


複合型 (すなわちclass ) は、さまざまな属性をより大きな概念または分類グループにグループ化するために使用されます。

class PlanetaryBody {
    public string Name { get; set; }
    public double Mass { get; set; }
    // etc.
}
于 2013-05-22T23:07:38.883 に答える
2

そのためにクラスを使用するだけです。

public class Planet {
   public int Id { get; set; }
   public string Name { get; set; }
   public int Size { get; set; }
  // and so on for each property of whatever type you need.
}

新しい惑星が必要な場合:

var planet = new Planet();
planet.Name = "Saturn";
// again finish populating the properties.

リストに追加するには:

var list = new List<Planet>();
list.Add(planet);
// adding the planet you created above.

次に、LINQ を使用したリストの操作などを調べます。

于 2013-05-22T23:10:26.230 に答える