从类对象的列表中检索字段数据

本文关键字:检索 字段 数据 列表 对象 | 更新日期: 2023-09-27 18:02:33

我最终试图存储顶点数据:x, y, z。我比较两种不同的集合类型来存储数据: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);

两个集合现在包含相同的数据。

问题来了。我正在寻找具有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(对于字典)的对象中获取双"x",我这样做:

double here3 = Nodes2[1001].x;

但是我不知道如何从List集合中获取数据。也许这是因为List集合不是用于此目的的。但是,如果可能的话,我如何从列表中取出相同的内容?

也许有人也可以解释另一种(更好的)方法来做这件事吗?我仍然不太了解为什么/何时使用LIST和DICTIONARY集合,因为似乎有100种方法可以做同样的事情。

从类对象的列表中检索字段数据

        int index = Nodes1.FindIndex(var => var.nid == 1001);
        double here4 = Nodes1[index].x;