无法创建嵌套列表,因为 list.Clear 似乎无法正常工作
Can't create nested list because list.Clear doesn't seem to work as I want
我尝试将由 200 行每行不同长度组成的 txt 文件加载到嵌套列表中,以便主列表中的每个子列表都等于行,因此将有 200 个子列表。
class MainClass
{
public static void Main (string[] args)
{
List<List<int>> arrayList = new List<List<int>>();
List<int> tmp = new List <int> ();
string[] file = File.ReadAllLines(@"C:\file.txt");
foreach (string line in file) {
string[] linef = line.Split (new char[] { ' ', '\t' }, StringSplitOptions.RemoveEmptyEntries);
tmp.Clear ();
for (int n = 0; n < linef.Length; n++) {
tmp.Add (int.Parse (linef [n]));
}
arrayList.Add (tmp);
}
但是 arrayList
接缝只包含最后一行 - 每当我尝试获取一些数字时,例如 arrayList[78][5]
,无论第一个索引是什么,它都会给我第 200 行的第 5 个数字- 78 或其他。我认为 tmp.Clear
有问题,但我不知道如何让它工作。
因为你多次将相同的 List<int> tmp
添加到 arrayList
,所以最后
bool areSame = object.ReferenceEquals(arrayList[0], arrayList[1]); // true
您有 一个 List<int>
和 n
个引用(arrayList
中每个 "row" 个引用)
改为:
foreach (string line in file) {
List<int> tmp = new List <int> ();
// No Clear necessary
tmp.Clear()
使您的列表为空,仅此而已。主列表仅包含 200 个对您的 tmp 列表的引用。
你得打电话
tmp = new List<int>();
而不是
tmp.Clear();
我尝试将由 200 行每行不同长度组成的 txt 文件加载到嵌套列表中,以便主列表中的每个子列表都等于行,因此将有 200 个子列表。
class MainClass
{
public static void Main (string[] args)
{
List<List<int>> arrayList = new List<List<int>>();
List<int> tmp = new List <int> ();
string[] file = File.ReadAllLines(@"C:\file.txt");
foreach (string line in file) {
string[] linef = line.Split (new char[] { ' ', '\t' }, StringSplitOptions.RemoveEmptyEntries);
tmp.Clear ();
for (int n = 0; n < linef.Length; n++) {
tmp.Add (int.Parse (linef [n]));
}
arrayList.Add (tmp);
}
但是 arrayList
接缝只包含最后一行 - 每当我尝试获取一些数字时,例如 arrayList[78][5]
,无论第一个索引是什么,它都会给我第 200 行的第 5 个数字- 78 或其他。我认为 tmp.Clear
有问题,但我不知道如何让它工作。
因为你多次将相同的 List<int> tmp
添加到 arrayList
,所以最后
bool areSame = object.ReferenceEquals(arrayList[0], arrayList[1]); // true
您有 一个 List<int>
和 n
个引用(arrayList
中每个 "row" 个引用)
改为:
foreach (string line in file) {
List<int> tmp = new List <int> ();
// No Clear necessary
tmp.Clear()
使您的列表为空,仅此而已。主列表仅包含 200 个对您的 tmp 列表的引用。
你得打电话
tmp = new List<int>();
而不是
tmp.Clear();