Arraylist tmp=new Arraylist();
Arraylist list=new Arraylist();
for(int i=0;i<20;i++)
{
    tmp.Add(list);
}
for(int i=0;i<200;i++)   ////总共有200个点,判断着二百个点在tmp的20个格子的哪个里
{      if(判断语句)
    {
        ((Arraylist)tmp[j]).add(i);
    }
}
tmp[j]的j是变化的  0---20
而且不是tmp[0].add后,就tmp[0].add另一个
而是tmp[0].add后,有可能没add完所有的0里面的数据就开始tmp[1].add,过一会发现还有0里面的数据就再tmp[0].add
这样做可以吗?为什么出现的数据一开始还对,运行几次就不对了呢?
这就相当于有一批点,坐标知道,还有一个网格,看看这200个点在那个格子里!!!!

解决方案 »

  1.   


    对啊。或者还可以用List<List<i>>
      

  2.   

    用List<List<i>> 和arraylist没什么大差别,主要是这200个点位置是没有顺序的,一个点在格子0里,下一个点在格子10里,然后又一个点在格子0里,每个格子里的点数还不固定。
      

  3.   

    那你可以用稀疏的形式保存。
    也就是List<Tuple<int, int, int>> Tuple保存x, y, value
    或者
    Dictionary<Point, int>。
      

  4.   

    现在的问题是
    为什么
     ((Arraylist)tmp[j]).add(i);
    的j值不断变化,又可能变回来,结果就不对???
    就是换成list<list<i>>也不行吧
      

  5.   

    要是
    ((Arraylist)tmp[j]).add(i);
    里j=2(例如)时,一直add(i),都add完以后再j=3时再add,那就好办了,现在是
    j=2时add一个,j=4时add一个,然后j=2时又add一个!不是按照顺序来的,所以结果不对!
      

  6.   


    对啊。或者还可以用List<List<i>>推荐泛型~
      

  7.   

    那你就不能做成一个classclass MyPoint
    {
        public int Position{get;set;}
        public object Obj{get;set;}
    }
      

  8.   

                 ArrayList tmp = new ArrayList();                       for (int j = 0; j < (ix + 1) * (jy + 1); j++)  
                ////这里ix是x方向格子数0--ix,jy是y方向格子数0--jy,
                {
                    ArrayList listxy = new ArrayList();
                   tmp.Add(listxy);           
                }
                           
                for (uint i = 0; i < 200; i++)
                {
                    double x1 = x[i] * factorx0 + offsetx0;
                    double y1 = y[i] * factory0 + offsety0;/////////通过x[i],y[i]得到x1,y1(大地坐标)                if ((x1 >= minx) && (x1 <= maxx) && (y1 >= miny) && (y1 <= maxy))
    /////这个判断是x1,y1在不在格子里
                    {                   
    //////maxx,minx,maxy,miny是格子的范围坐标,以radius为边长做格子
                      int xx = Convert.ToInt32((x1 - minx) / radius);
                      int yy = Convert.ToInt32((y1 - miny) / radius);
    /////得到的xx,yy是x方向,y方向的方格的位置
                     ((ArrayList)tmp[xx * (jy + 1) + yy]).Add(i);
    ////////确定x1,y1在[xx * (jy + 1) + yy]这个格子里,在这个格子里把i加入
                    }
              }
    现在的问题是: ((ArrayList)tmp[xx * (jy + 1) + yy]).Add(i);
    因为第i个点得到的格子位置是随意的,不一定在格子的哪个位置,有可能在确定0号格子几个点后,就要确定第11号格子的点,然后又有0号格子的点要加入,所以想问问怎么解决?
      

  9.   


    Dictionary<Point, List<int>>。