我最终试图存储Vertex数据:x,y,z。我正在比较两种不同的集合类型来存储数据:List<T>
和Dictionary<K,V>
。两者都包含相同的公共类数据。注意差异;我的列表使用了一个构造函数(我稍后添加到列表中),我的dict使用一个方法来添加到dict:
我的列表
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));
}
}
并且有一个...... DICTIONARY
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);
}
}
在我的主要内容中,我使用Vertex数据读取文本文件并执行以下操作(已删除了很多内容):
var Nodes1 = new Node1();
var Nodes2 = new Node2();
string strLine;
Nodes1.Add(new Node1(strLine));
Nodes2.Add(strLine);
两个集合现在都包含相同的数据。
现在问题来了。我正在寻找类的特定实例,其int“nid”等于1001,我想找到相应的双“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(对于dict)的对象中获取双“x”,我会这样做:
double here3 = Nodes2[1001].x;
但我无法弄清楚如何从List集合中获取数据。也许是因为List集合并非用于此目的。但是,如果可能的话,我如何从列表中获得相同的内容?
也许有人也可以解释另一种(更好的)方法吗?我仍然不清楚为什么/何时使用LIST和DICTIONARY集合,因为似乎有100种方法可以做同样的事情。
答案 0 :(得分:0)
int index = Nodes1.FindIndex(var => var.nid == 1001);
double here4 = Nodes1[index].x;