C# 三重嵌套列表<&燃气轮机;在C中#

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

不久前,我问了一个关于C#中的多维锯齿数组的问题。好吧,我尝试了列表类,但是遇到了一些麻烦。所发生的事情是,只有wtflist中的几个值实际到达Main()的末尾。如何确保所有数据都进入(并保持在)wtflist

编辑:这是我的新代码:

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)将更有可能跳出来攻击你。