私は最終的に頂点データを保存しようとしています:x、y、z。データを格納する 2 つの異なるコレクション タイプを比較しています:List<T>
とDictionary<K,V>
. どちらにも同じパブリック クラス データが含まれています。違いに注意してください。私のリストはコンストラクターを使用し(後でリストに追加します)、私の辞書はメソッドを使用して辞書に追加します:
私のリスト
class Node1: List<Node1>
{
public int nid;
public double x, y, z;
public Node1() {}
public Node1(string strLine)
{
nid = int.Parse(strLine.Substring(8, 8));
x = double.Parse(strLine.Substring(24, 8));
y = double.Parse(strLine.Substring(32, 8));
z = double.Parse(strLine.Substring(40, 8));
}
}
そしてこれがあります... 辞書
public struct loc
{
public double x, y, z;
}
public class Node2: Dictionary<int,loc>
{
public int nid;
public void Add(string strLine)
{
// collect the dictionary KEY
nid = int.Parse(strLine.Substring(8, 8));
// collect the dictionary VALUE
loc data;
data.x = double.Parse(strLine.Substring(24, 8));
data.y = double.Parse(strLine.Substring(32, 8));
data.z = double.Parse(strLine.Substring(40, 8));
this.Add(nid, data);
}
}
私のメインでは、頂点データを含むテキスト ファイルを読み込んで、次のことを行います (多くは削除されています)。
var Nodes1 = new Node1();
var Nodes2 = new Node2();
string strLine;
Nodes1.Add(new Node1(strLine));
Nodes2.Add(strLine);
両方のコレクションに同じデータが含まれるようになりました。
ここで質問です。1001 に等しい int "nid" を持つクラスの特定のインスタンスを探しており、対応する double "x" の値を見つけたいと考えています。それを少し明確にするために (私は自分自身を混乱させただけだったので)、次のようにして nid=1001 を含むインスタンスが存在するかどうかを確認できます。
// does the entry exist - LIST
bool here1 = Nodes1.Exists(var => var.nid == 1001);
// does the entry exist - DICTIONARY
bool here2 = Nodes2.ContainsKey(1001);
nid=1001 を含むオブジェクトから二重の「x」を取得するには(辞書用)、次のようにします。
double here3 = Nodes2[1001].x;
しかし、List コレクションからデータを取得する方法がわかりません。おそらく、List コレクションがこの目的のために意図されていないことが原因です。しかし、可能であれば、どうすればリストから同じものを取得できますか?
おそらく、誰かがこれを行う別の(より良い)方法を説明できますか?同じことを行うには100の方法があるように見えるため、LISTおよびDICTIONARYコレクションを使用する理由/時期についてはまだ十分に理解していません。