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个点在那个格子里!!!!
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个点在那个格子里!!!!
对啊。或者还可以用List<List<i>>
也就是List<Tuple<int, int, int>> Tuple保存x, y, value
或者
Dictionary<Point, int>。
为什么
((Arraylist)tmp[j]).add(i);
的j值不断变化,又可能变回来,结果就不对???
就是换成list<list<i>>也不行吧
((Arraylist)tmp[j]).add(i);
里j=2(例如)时,一直add(i),都add完以后再j=3时再add,那就好办了,现在是
j=2时add一个,j=4时add一个,然后j=2时又add一个!不是按照顺序来的,所以结果不对!
对啊。或者还可以用List<List<i>>推荐泛型~
{
public int Position{get;set;}
public object Obj{get;set;}
}
////这里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号格子的点要加入,所以想问问怎么解决?
Dictionary<Point, List<int>>。