如何建二维Arraylist,不定长的数组?求助
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个点在那个格子里!!!! --------------------编程问答-------------------- 用交错数组嘛
int[][] --------------------编程问答-------------------- 不定长的,无法确定数组的长度,总共200个点,200个点中也有不在格子里的 --------------------编程问答-------------------- 除 --------------------编程问答--------------------
对啊。
或者还可以用List<List<i>> --------------------编程问答-------------------- 用List<List<i>> 和arraylist没什么大差别,主要是这200个点位置是没有顺序的,一个点在格子0里,下一个点在格子10里,然后又一个点在格子0里,每个格子里的点数还不固定。 --------------------编程问答--------------------
那你可以用稀疏的形式保存。
也就是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一个!不是按照顺序来的,所以结果不对! --------------------编程问答--------------------
推荐泛型~ --------------------编程问答-------------------- 那你就不能做成一个class
--------------------编程问答--------------------
class MyPoint
{
public int Position{get;set;}
public object Obj{get;set;}
}
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号格子的点要加入,所以想问问怎么解决? --------------------编程问答-------------------- 而且每个格子中的点数是不定的,有的格子中点多有的格子中点少,还有的点没在格子里 --------------------编程问答-------------------- 该问题如何解决? --------------------编程问答--------------------
而且每个格子中的点数是不定的,有的格子中点多有的格子中点少,还有的点没在格子里
Dictionary<Point, List<int>>。
补充:.NET技术 , C#