C#动态数组:需要读取100273个(X,Y,Z)坐标,要将下面的代码改成动态数组存储,请大家帮忙!

2024-12-12 17:09:03
推荐回答(5个)
回答1:

才10万个座标,其实算很少了,你把代码改一下,一个座标点用一个类来保存,形如

public class myPoint
    {
        public double X = 0;
        public double Y = 0;
        public double Z = 0;
        public myPoint(double x, double y, double z)
        {
            this.X = x; this.Y = y; this.Z = z;
        }
        public myPoint(string x, string y, string z)
        {
            double x1=0,y1=0,z1=0;
            if(double.TryParse(x,out x1))
                 if(double.TryParse(y,out y1))
                      if(double.TryParse(z,out z1))
                          this.X = x1; this.Y = y1; this.Z = z1;
        }
    }


你原本程序中关于数组的可以全部删除,我不太清楚你文件中的内容,假定每行是

X1 Y1 Z1

X2 Y2 Z1

这种格式,读取数据时代码可以改成如下的


            List list = new List();
            string str=null;
            while ((str=objreader.ReadLine()) != null)
            {
                string[] temp = str.Split(new char[]{' ','\r','\n'}, StringSplitOptions.RemoveEmptyEntries);
                if (temp.Length == 3) //是正确的座标
                {
                    list.Add(new myPoint(temp[0], temp[1], temp[2]));
                }
            }
            objreader.Close();
            //之后就可以访问list[0]至list[list.Count-1],比如说访问第0个元素的x即可用list[0].X

回答2:

个人观点:你的数组有点大,建议采用数据库的方式存放,这样操作起来比较方便,占用的内存也会小一些。

回答3:

10W坐标其实非常的少,经常处理坐标可能几十亿个,每个还有若干属性,10W个坐标用List就足够了。
10W数据读进来差不多的计算机配置也就是几秒到十几秒的事儿。
读进来你要进行什么操作呢?

回答4:

用List来存,是动态分配内存,原则上系统还有空余内存,程序就能申请到存储空间,可以一次性存下来的。

回答5:

你的意思是说不知道数组元素个数?可以用List试试。