我定义了一个结构如下
public struct Point3D_struct
    {
        public float x;
        public float y;
        public float z;
        public int ID;
        public Point3D_struct(float xx, float yy, float zz, int id)
        {
            this.x = xx;
            this.y = yy;
            this.z = zz;
            this.ID = id;
        }
    }
然后建立list数组
public List<Point3D_struct> PCptsList = new List<Point3D_struct>();
我将一系列的点坐标存入数组后,怎样才可以快速得到指定id(id具有唯一性)的坐标值呢?

解决方案 »

  1.   

    补充一下,id为点号,x,y,z为点的坐标
      

  2.   

    public List<Point3D_struct> PCptsList = new List<Point3D_struct>();
    ...
    Point3D_struct find = PCptsList.Where(x => x.id == findid).First();
      

  3.   


    public List<Point3D_struct> PCptsList = new List<Point3D_struct>();
    ...Type   type   =   typeof(Point3D_struct);
    foreach   (FieldInfo   mi   in   type.GetFields(BindingFlags.Instance   |   BindingFlags.Public   |   BindingFlags.NonPublic))
    {
        //根据你要获取的值,这里假如为1的话
        if(mi.ID==1)
        {
               //输出1对应的点的xyz坐标值
               Response.Write(mi.x+","+mi.y+","+mi.z);
        }
    }
                  
      

  4.   

    int index = PCptsList.FindIndex(s => s.ID == 0);if(index>-1)
    {
        //存在元素
         //对应元素
         //PCptsList[index]
    }
    else
    {
        //不存在
    }
      

  5.   

    因为是struct ,不通过标记位是很难确定查找的元素是否在已知集合中,FirstOrDefault,SingleOrDefault,Find  etc..异常的方式更不用考虑First,Single etc..
      

  6.   

    List<T>本来就有Find方法:            List<Point3D_struct> list = new List<Point3D_struct>();
                Point3D_struct ps = list.Find(delegate(Point3D_struct p) { return p.ID == 1; });//找到ID为1的元素
      

  7.   

    .net framework 2.0 下改下oj的//找到ID为1的元素的下标
    int index = PCptsList.FindIndex(delegate(Point3D_struct p) { return p.ID == 1; });
    if(index>-1)
    {
      //存在元素
      //对应元素
      //PCptsList[index]
    }
    else
    {
      //不存在
    }
      

  8.   

    楼主,NET有现成的东西:HashTable 、SortedList 都可以:
    以哈希表为例:Hashtable myHT = new Hashtable();
    Point3D_struct pt=new Point3D_struct(5,6,7,0);
    myHT.Add(id ,pt);
    .....................Point3D_struct temp=(Point3D_struct)myHT[id];//通过id便可以获取对于的pt
      

  9.   

    思路就是遍历,发现立马break,不过list自带很多对比和查找函数的,可以用函数解决就不要遍历