首页 新闻 搜索 专区 学院

利用C#语言,如何用泛型List来开辟二维数组,及赋值

0
悬赏园豆:5 [已解决问题] 解决于 2013-01-31 11:50

利用C#语言,如何用泛型List来开辟二维数组,及赋值。

主要是普通数组int[][]经常数据太多会,编译运行不了,所以要开辟动态数组,以前C++用的vector,现在用C#里面的List不是很清楚。

主要是想将一个txt文件中的100x100(100行100列)数据赋值给一个动态二维数组。用list如何定义及赋值。

data.txt

1  2   3   4  5  6  ...

45  56 66  33 67  ...

.

.

.

在网上搜到一些利用List<List<int>> lists = new List<List<int>>()来定义,但是如何将一个txt文档中的数据读入到这个二维数组中呢??

C#
ZGHAPPY的主页 ZGHAPPY | 菜鸟二级 | 园豆:207
提问于:2013-01-30 22:05
< >
分享
最佳答案
1
static void Main(string[] args)
        {
            string path = string.Format(@"{0}\1.txt",AppDomain.CurrentDomain.BaseDirectory);

            var list = new List<List<int>>();
            using (StreamReader sr = new StreamReader(path, System.Text.Encoding.Default)) 
            {
                string line;
                while ((line = sr.ReadLine()) != null)
                {
                    var item = new List<int>();
                    var lineList = line.Trim().Split(' ');

                    foreach (var s in lineList)
                    {
                        item.Add(Convert.ToInt32(s));
                    }

                    list.Add(item);
                }
            }

            Console.Read();
        }
收获园豆:5
Rich.T | 老鸟四级 |园豆:3440 | 2013-01-31 09:34

谢谢

如何理解list[i][j]对应的i,j下标,因为参与计算时要用到i,j

ZGHAPPY | 园豆:207 (菜鸟二级) | 2013-01-31 10:38

@张行者: 

var list = new List<List<int>>();
list[i][j]这就是你要的下标

Rich.T | 园豆:3440 (老鸟四级) | 2013-01-31 10:40

@Rich.T:

也就是说读入数据后,就可以直接用list[i][j]了,好的,谢谢你明白了 

ZGHAPPY | 园豆:207 (菜鸟二级) | 2013-01-31 11:48

@张行者: 为什么不能这么定义List<List<doulbe>> list = new List<List<double>>();

然后像数组一样的赋值给list[][];

list[0][0]=1;

list[0][1]=2;

ZGHAPPY | 园豆:207 (菜鸟二级) | 2013-01-31 16:13

@张行者: 

因为这时List<double>>还没有被实例化,所以需要new List<double>>();

Rich.T | 园豆:3440 (老鸟四级) | 2013-01-31 16:16

@Rich.T: 

实例化是不是就是初始化,在C++里面的vector有一个resize()成员,用resize来初始化vector的长度并默认所以值都为0,然后就可以对一个vector向量用vec[i]来赋值,

但是在list里面好像没有发现这个功能,

有一个Capacity成员,但是并不能将list数组里面的值初始化为0,所以只用用Add来加入数据,用Add函数加入数据到list尾部,如果list是一维的很好理解,但是list为二维或者三维的时候这个加进去后,list[i][j][k]下标ijk对应上就觉得有点麻烦了???

ZGHAPPY | 园豆:207 (菜鸟二级) | 2013-02-01 00:39

我想知道如何调用这个二维泛型数组,谢谢你

隐忆枫殇 | 园豆:200 (初学一级) | 2014-12-08 17:34
其他回答(2)
0

C++里你咋读的文件,C#里就咋读。

Launcher | 园豆:45045 (高人七级) | 2013-01-31 09:16

用泛型List<T>开辟二维怎么设置它的长度和初始化,

如在C++中有vector<vector<double> > a(Nx, vecoter<double>(Ny));

然后读入数据直接可以用

file<<a[i][j];

或者a.resize(Nx, vector<double>(Ny))设置其长度,在用文件读

但是List具体怎么操作,好像很麻烦,要定义两个一维数组再用加入到二维数组中

List<List<double>> a = new List<List<double>>();

List<double> a1 = new List<double>();

List<double> a2 = new List<double>();

将a1和a2赋值后再

用a.Add(a1);

a.Add(a2);

很是模糊不清楚啊!!

望高手解决我的疑惑

支持(0) 反对(0) ZGHAPPY | 园豆:207 (菜鸟二级) | 2013-01-31 09:27
0
static void Main(string[] args)
        {

            StreamReader dataReader = new StreamReader("文件路径", Encoding.Default);

            //读取一行数据的临时存储区
            string lineTemp;
            

            //如果不为空就读下去
            while (!string.IsNullOrEmpty(lineTemp = dataReader.ReadLine()))
            {


                //假如说每一行是以,号分隔的数据
                //1,2
                //3,4

                //6,7
                string[] strSplit = lineTemp.Split(',');


                //创建二维数组

                List<List<string>> list = new List<List<string>>();

                //行数据为一维


                //里存的数据为二维


                for (int i = 1; i <=strSplit.Length; i++)
                {
                    list.Add(new List<string>
                    {
                        strSplit[0],
                        strSplit[1]
                    });
                }

                //完毕

                //这时候 这个数组就是二维的

                //数据类似

                //1, (1,3)

                //2,(3,2)

                //3,(5,3)


                


            }
        }
田麦成 | 园豆:2004 (老鸟四级) | 2013-01-31 09:32

非常谢谢

支持(0) 反对(0) ZGHAPPY | 园豆:207 (菜鸟二级) | 2013-01-31 10:29

list.Add(new List<int>)什么意思

还有如何理解list[i][j]对应的i,j下标,因为参与计算时要用到i,j

支持(0) 反对(0) ZGHAPPY | 园豆:207 (菜鸟二级) | 2013-01-31 10:33
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册