利用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文档中的数据读入到这个二维数组中呢??
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(); }
谢谢
如何理解list[i][j]对应的i,j下标,因为参与计算时要用到i,j
@张行者:
var list = new List<List<int>>();
list[i][j]这就是你要的下标
@Rich.T:
也就是说读入数据后,就可以直接用list[i][j]了,好的,谢谢你明白了
@张行者: 为什么不能这么定义List<List<doulbe>> list = new List<List<double>>();
然后像数组一样的赋值给list[][];
list[0][0]=1;
list[0][1]=2;
@张行者:
因为这时List<double>>还没有被实例化,所以需要new List<double>>();
@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对应上就觉得有点麻烦了???
我想知道如何调用这个二维泛型数组,谢谢你
C++里你咋读的文件,C#里就咋读。
用泛型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);
很是模糊不清楚啊!!
望高手解决我的疑惑
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) } }
非常谢谢
list.Add(new List<int>)什么意思
还有如何理解list[i][j]对应的i,j下标,因为参与计算时要用到i,j