当前位置:编程学习 > C#/ASP.NET >>

如何建二维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个点中也有不在格子里的 --------------------编程问答-------------------- 除 --------------------编程问答--------------------
引用 2 楼 u012407560 的回复:
不定长的,无法确定数组的长度,总共200个点,200个点中也有不在格子里的


对啊。

或者还可以用List<List<i>> --------------------编程问答-------------------- 用List<List<i>> 和arraylist没什么大差别,主要是这200个点位置是没有顺序的,一个点在格子0里,下一个点在格子10里,然后又一个点在格子0里,每个格子里的点数还不固定。 --------------------编程问答--------------------
引用 5 楼 u012407560 的回复:
用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一个!不是按照顺序来的,所以结果不对! --------------------编程问答--------------------
引用 4 楼 caozhy 的回复:
Quote: 引用 2 楼 u012407560 的回复:

不定长的,无法确定数组的长度,总共200个点,200个点中也有不在格子里的


对啊。

或者还可以用List<List<i>>


推荐泛型~ --------------------编程问答-------------------- 那你就不能做成一个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号格子的点要加入,所以想问问怎么解决? --------------------编程问答-------------------- 而且每个格子中的点数是不定的,有的格子中点多有的格子中点少,还有的点没在格子里 --------------------编程问答-------------------- 该问题如何解决? --------------------编程问答--------------------
引用 12 楼 u012407560 的回复:
而且每个格子中的点数是不定的,有的格子中点多有的格子中点少,还有的点没在格子里


Dictionary<Point, List<int>>。
补充:.NET技术 ,  C#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,