C# 三重嵌套列表<&燃气轮机;在C中#
不久前,我问了一个关于C#中的多维锯齿数组的问题。好吧,我尝试了列表类,但是遇到了一些麻烦。所发生的事情是,只有wtflist中的几个值实际到达Main()的末尾。如何确保所有数据都进入(并保持在)wtflist 编辑:这是我的新代码:C# 三重嵌套列表<&燃气轮机;在C中#,c#,arrays,nested-lists,C#,Arrays,Nested Lists,不久前,我问了一个关于C#中的多维锯齿数组的问题。好吧,我尝试了列表类,但是遇到了一些麻烦。所发生的事情是,只有wtflist中的几个值实际到达Main()的末尾。如何确保所有数据都进入(并保持在)wtflist 编辑:这是我的新代码: using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.IO; namespace ConsoleIometerPar
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
namespace ConsoleIometerParser
{
class Program
{
public static int linenum = 0;
public static int totaldisks = 0;
public static int disk = 0;
public static List<List<List<string>>> overallList = new List<List<List<string>>>();
static int Main(string[] args)
{
string filename = args[0];
string[] lines = System.IO.File.ReadAllLines(@filename);
System.Console.WriteLine("Processing Data...");
foreach (string line in lines)
{
string[] linearray;
string lineNoQuotes;
char[] delimiter = new Char[] { ',' };
lineNoQuotes = line.Replace("\"", string.Empty);
lineNoQuotes = lineNoQuotes.Replace("'", string.Empty);
linearray = lineNoQuotes.Split(delimiter);
totaldisks = (linearray.Length - 1) / 10;
for (disk = 0; disk < totaldisks; disk++)
{
List<List<string>> diskDataList = new List<List<string>>();
List<string> dataList = new List<string>();
dataList.Add("");
dataList.Add(args[1]);
dataList.Add(linearray[0]);
for (int i = 1; i < 10; i++)
{
int arraypos = disk + (i * totaldisks);
dataList.Add(linearray[arraypos].ToString());
diskDataList.Add(dataList);
}
overallList.Add(diskDataList);
}
linenum++;
}
int count1 = 0;
int count2 = 0;
int count3 = 0;
foreach (var wtf in overallList)
{
foreach (var lol in wtf)
{
foreach (var zomg in lol)
{
Console.WriteLine("overallList[{0},{1},{2}]: {3}", count1, count2, count3, zomg);
count3++;
}
count3 = 0;
count2++;
}
count2 = 0;
count1++;
}
Console.WriteLine("Data Processed Successfully.");
Console.Read();
return 0;
}
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
namespace ConsoleIometerParser
{
class Program
{
public static int linenum = 0;
public static int totaldisks = 0;
public static int disk = 0;
public static List<List<List<string>>> wtflist = new List<List<List<string>>>();
//public static string[,,] sqlarray;
static int Main(string[] args)
{
string filename = args[0];
string[] lines = System.IO.File.ReadAllLines(@filename);
System.Console.WriteLine("Processing Data...");
foreach (string line in lines)
{
//Console.WriteLine("Linenum: " + linenum);
string[] linearray;
string lineNoQuotes;
char[] delimiter = new Char[] { ',' };
lineNoQuotes = line.Replace("\"", string.Empty);
lineNoQuotes = lineNoQuotes.Replace("'", string.Empty);
linearray = lineNoQuotes.Split(delimiter);
totaldisks = (linearray.Length - 1) / 10;
//sqlarray = new string[totaldisks, lines.Length, 13];
for (disk = 0; disk < totaldisks; disk++)
{
List<List<string>> lollist = new List<List<string>>();
//sqlarray[disk, linenum, 0] = ""; //blank field for the SQL id field
//sqlarray[disk, linenum, 1] = args[1]; //testid
//sqlarray[disk, linenum, 2] = linearray[0]; //time
for (int i = 1; i < 10; i++)
{
List<string> zomglist = new List<string>();
int arraypos = disk + (i * totaldisks);
//sqlarray[disk, linenum, i + 2] = linearray[arraypos].ToString();
//Console.WriteLine("sqlarray[{0},{1},{2}]: {3}", disk, linenum, i, sqlarray[disk, linenum, i]);
zomglist.Add(linearray[arraypos].ToString());
Console.WriteLine("zomglist data: {0}", zomglist.Last());
if (i == 9) lollist.Add(zomglist);
}
wtflist.Add(lollist);
}
linenum++;
}
foreach (var wtf in wtflist)
{
foreach (var lol in wtf)
{
foreach (var zomg in lol)
{
Console.WriteLine("ZOMG: " + zomg);
}
}
}
Console.WriteLine("Data Processed Successfully.");
Console.Read();
return 0;
}
}
}
以下是旧的代码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
namespace ConsoleIometerParser
{
class Program
{
public static int linenum = 0;
public static int totaldisks = 0;
public static int disk = 0;
public static List<List<List<string>>> overallList = new List<List<List<string>>>();
static int Main(string[] args)
{
string filename = args[0];
string[] lines = System.IO.File.ReadAllLines(@filename);
System.Console.WriteLine("Processing Data...");
foreach (string line in lines)
{
string[] linearray;
string lineNoQuotes;
char[] delimiter = new Char[] { ',' };
lineNoQuotes = line.Replace("\"", string.Empty);
lineNoQuotes = lineNoQuotes.Replace("'", string.Empty);
linearray = lineNoQuotes.Split(delimiter);
totaldisks = (linearray.Length - 1) / 10;
for (disk = 0; disk < totaldisks; disk++)
{
List<List<string>> diskDataList = new List<List<string>>();
List<string> dataList = new List<string>();
dataList.Add("");
dataList.Add(args[1]);
dataList.Add(linearray[0]);
for (int i = 1; i < 10; i++)
{
int arraypos = disk + (i * totaldisks);
dataList.Add(linearray[arraypos].ToString());
diskDataList.Add(dataList);
}
overallList.Add(diskDataList);
}
linenum++;
}
int count1 = 0;
int count2 = 0;
int count3 = 0;
foreach (var wtf in overallList)
{
foreach (var lol in wtf)
{
foreach (var zomg in lol)
{
Console.WriteLine("overallList[{0},{1},{2}]: {3}", count1, count2, count3, zomg);
count3++;
}
count3 = 0;
count2++;
}
count2 = 0;
count1++;
}
Console.WriteLine("Data Processed Successfully.");
Console.Read();
return 0;
}
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
namespace ConsoleIometerParser
{
class Program
{
public static int linenum = 0;
public static int totaldisks = 0;
public static int disk = 0;
public static List<List<List<string>>> wtflist = new List<List<List<string>>>();
//public static string[,,] sqlarray;
static int Main(string[] args)
{
string filename = args[0];
string[] lines = System.IO.File.ReadAllLines(@filename);
System.Console.WriteLine("Processing Data...");
foreach (string line in lines)
{
//Console.WriteLine("Linenum: " + linenum);
string[] linearray;
string lineNoQuotes;
char[] delimiter = new Char[] { ',' };
lineNoQuotes = line.Replace("\"", string.Empty);
lineNoQuotes = lineNoQuotes.Replace("'", string.Empty);
linearray = lineNoQuotes.Split(delimiter);
totaldisks = (linearray.Length - 1) / 10;
//sqlarray = new string[totaldisks, lines.Length, 13];
for (disk = 0; disk < totaldisks; disk++)
{
List<List<string>> lollist = new List<List<string>>();
//sqlarray[disk, linenum, 0] = ""; //blank field for the SQL id field
//sqlarray[disk, linenum, 1] = args[1]; //testid
//sqlarray[disk, linenum, 2] = linearray[0]; //time
for (int i = 1; i < 10; i++)
{
List<string> zomglist = new List<string>();
int arraypos = disk + (i * totaldisks);
//sqlarray[disk, linenum, i + 2] = linearray[arraypos].ToString();
//Console.WriteLine("sqlarray[{0},{1},{2}]: {3}", disk, linenum, i, sqlarray[disk, linenum, i]);
zomglist.Add(linearray[arraypos].ToString());
Console.WriteLine("zomglist data: {0}", zomglist.Last());
if (i == 9) lollist.Add(zomglist);
}
wtflist.Add(lollist);
}
linenum++;
}
foreach (var wtf in wtflist)
{
foreach (var lol in wtf)
{
foreach (var zomg in lol)
{
Console.WriteLine("ZOMG: " + zomg);
}
}
}
Console.WriteLine("Data Processed Successfully.");
Console.Read();
return 0;
}
}
}
使用系统;
使用System.Collections.Generic;
使用System.Linq;
使用系统文本;
使用System.IO;
名称空间控制台
{
班级计划
{
公共静态int-linenum=0;
公共静态int totaldisks=0;
公共静态int盘=0;
公共静态列表wtflist=新列表();
//公共静态字符串[,]sqlarray;
静态int Main(字符串[]args)
{
字符串文件名=args[0];
string[]lines=System.IO.File.ReadAllLines(@filename);
System.Console.WriteLine(“处理数据…”);
foreach(行中的字符串行)
{
//Console.WriteLine(“Linenum:+Linenum”);
字符串[]线性排列;
字符串行引号;
字符[]分隔符=新字符[]{',};
lineNoQuotes=line.Replace(“\”,string.Empty);
lineNoQuotes=lineNoQuotes.Replace(“”,string.Empty);
linearray=lineNoQuotes.Split(分隔符);
totaldisks=(linearray.Length-1)/10;
//sqlarray=新字符串[totaldisks,lines.Length,13];
对于(磁盘=0;磁盘
你的行:如果(i==9)lollist.Add(zomglist);
意味着只有十分之一(或每十分之一)创建的zomglist
s将被添加到lollist
。对我来说,它的执行似乎非常完美。您每次都通过for i循环创建一个新的zomglist,但仅在i==9时才将其添加到lollist。其他9个zomglist将丢失
但是fori循环的目的似乎是填充zomglist,因此您确实需要将zomglist&it的创建添加到lollist中,并将其移动到循环之外:
List<string> zomglist = new List<string>();
for (int i = 1; i < 10; i++)
{
int arraypos = disk + (i * totaldisks);
zomglist.Add(linearray[arraypos].ToString());
Console.WriteLine("zomglist data: {0}", zomglist.Last());
}
lollist.Add(zomglist);
List zomglist=new List();
对于(int i=1;i<10;i++)
{
int arraypos=磁盘+(i*totaldisks);
Add(linearray[arraypos].ToString());
WriteLine(“zomglist数据:{0}”,zomglist.Last());
}
lollist.Add(zomglist);
类似地,lollist的创建及其添加到wtflist的操作也需要移到for disk循环之外。您有以下几点:
for (int i = 1; i < 10; i++)
{
List<string> zomglist = new List<string>();
你的问题是…?好的…还是不明白。wtflist中的一个项目的例子是什么?你假设你的三重嵌套列表填充正确。可能不是。你的代码一团糟。请尝试清理它,确保你得到了正确的数据。你想做什么?我们正在尝试我说的“真的”,我的意思是,肯定有一种更干净的方法来处理一组对象。从技术上讲,它会起作用。另一方面,维护会很困难(特别是如果它的其他人必须阅读和理解此代码)。我想如果你这样做,答案(很好的发现,@md5sum)将更有可能跳出来攻击你。