C# 如何创建数组的子集?

C# 如何创建数组的子集?,c#,arrays,C#,Arrays,我有一个数组,其中有许多字符串行 对于该数组中的每一行,如果满足条件, 我有一个控制台应用程序,可以显示阵列中的线路,并进行了一些修改(我称之为输出线路) 如何从输出行列表中生成数组 class Program { static void Main(string[] args) { string[] linesArray = File.ReadAllLines(@"C:\Users\AK1\Desktop\CC2_B.TXT"); int line

我有一个数组,其中有许多
字符串

对于该数组中的每一行,如果满足条件, 我有一个控制台应用程序,可以显示阵列中的线路,并进行了一些修改(我称之为
输出线路

如何从
输出行列表中生成数组

class Program
{
    static void Main(string[] args)
    {
        string[] linesArray = File.ReadAllLines(@"C:\Users\AK1\Desktop\CC2_B.TXT");
        int linecount = File.ReadAllLines(@"C:\Users\AK1\Desktop\CC2_B.TXT").Length;            

        for (int i = 0; i < linecount; i++)
        {
            if (linesArray[i].Contains("2008/12"))
            {
                string[] outputArray = linesArray;

                string outputLine = "yes    " + outputArray[i];
                Console.WriteLine(outputLine);

            }

        }

        Console.ReadLine();
    }
}
类程序
{
静态void Main(字符串[]参数)
{
字符串[]linesArray=File.ReadAllLines(@“C:\Users\AK1\Desktop\CC2_B.TXT”);
int linecount=File.ReadAllLines(@“C:\Users\AK1\Desktop\CC2_B.TXT”).Length;
对于(int i=0;i
声明一个容量为linecount的数组,以防需要添加每一行。 我想这是C++的吧?因此,不能在运行时增加数组大小

static void Main(string[] args)
{
    int outputCounter=0;
    .......
        if (linesArray[i].Contains("2008/12"))
        {
            string outputLine = "yes    " + outputArray[i];

             outputArray[outputCounter]= outputLine;
             outputCounter++;  
             Console.WriteLine(outputLine);   
        }

    }
更新: 对于c#就这样做吧

static void Main(string[] args)
{
    List<string> outputList = new List<string>();
    .......
        if (linesArray[i].Contains("2008/12"))
        {
            string outputLine = "yes    " + outputArray[i];

             outputList.Add(outputLine);
             Console.WriteLine(outputLine);   
        }

    }
static void Main(字符串[]args)
{
List outputList=新列表();
.......
if(linesArray[i].Contains(“2008/12”))
{
字符串outputLine=“是”+outputArray[i];
outputList.Add(outputLine);
控制台写入线(输出线);
}
}

您要查找的是
列表
,而不是
数组
,该数组必须在声明时用C#定义其大小。您可能需要参考关于向
数组添加元素的内容,以便更好地理解
列表
数组

使用System.Collections.Generic在文件顶部添加
,并按如下方式修改代码:

class Program
{
    static void Main(string[] args)
    {
        string[] linesArray = File.ReadAllLines(@"C:\Users\AK1\Desktop\CC2_B.TXT");
        int linecount = File.ReadAllLines(@"C:\Users\AK1\Desktop\CC2_B.TXT").Length;            
        List<string> outputLines = new List<string>();

        for (int i = 0; i < linecount; i++)
        {
            if (linesArray[i].Contains("2008/12"))
            {
                string outputLine = "yes    " + linesArray[i];
                outputLines.Add(outputLine);
                Console.WriteLine(outputLine);
            }

        }
        Console.ReadLine();
    }
}
类程序
{
静态void Main(字符串[]参数)
{
字符串[]linesArray=File.ReadAllLines(@“C:\Users\AK1\Desktop\CC2_B.TXT”);
int linecount=File.ReadAllLines(@“C:\Users\AK1\Desktop\CC2_B.TXT”).Length;
List outputLines=新列表();
对于(int i=0;i

然后,如果您真的需要它成为一个数组(比如将它传递给另一个函数),您可以调用
outputLines.ToArray()

为什么不首先使用linq过滤具有所需条件的行?然后您可以在控制台中输出

string[] lines = File.ReadAllLines(@"C:\Users\AK1\Desktop\CC2_B.TXT");
string[] filteredLines = lines.Where(line => line.Contains("2008/12")).ToArray();
foreach(string line in filteredLines){
    Console.WriteLine("yes    " + line);
}

如果要进行动态添加,请尝试使用列表而不是数组。比如,

class Program
{
    static void Main(string[] args)
    {
        string[] linesArray = File.ReadAllLines(@"C:\Users\AK1\Desktop\CC2_B.TXT");
        int linecount = File.ReadAllLines(@"C:\Users\AK1\Desktop\CC2_B.TXT").Length;
        // Delcare your list here
        List<string> outputList = new List<string>();            

        for (int i = 0; i < linecount; i++)
        {
            if (linesArray[i].Contains("2008/12"))
            {
                // You can "Add" to lists easily like this
                outputList.Add(linesArray[i]);

                // This will return you the last item in the list
                string outputLine = "yes    " + outputList.Last();
                Console.WriteLine(outputLine);
            }
        }

        // Then if you specifically want it back to an Array
        string[] outputArray = outputList.ToArray();

        Console.ReadLine();
    }
}
类程序
{
静态void Main(字符串[]参数)
{
字符串[]linesArray=File.ReadAllLines(@“C:\Users\AK1\Desktop\CC2_B.TXT”);
int linecount=File.ReadAllLines(@“C:\Users\AK1\Desktop\CC2_B.TXT”).Length;
//请把你的名单放在这里
List outputList=新列表();
对于(int i=0;i

希望这有帮助:)

你能用你正在使用的语言添加标签吗?你不能创建一个数组并继续添加输出线吗?这听起来是个明智的好主意。我假设我在FOR循环之外声明了它,但是如何继续将它添加到新数组中呢?这实际上会导致非常糟糕的性能,因为每次通过添加新行或分配可能包含无用空间的大量数组来扩大数组时,都必须为数组重新分配空间并复制每个值(这可能比列表更好,因为性能至关重要,RAM便宜/您的文件不太大)另外@AjK
string[]outputArray=linesArray;
有点无用。虽然它不会创建数组的副本(谢天谢地),为什么要费心为同一数组创建一个新的引用,直接使用
linesArray
。这实际上是C#但你的答案仍然成立。谢谢-这很好。因此这将“outputLine”添加到“outputLines”列表中,这很好。但是如果我将输出从“outputLine”更改为“outputLines”在控制台应用程序中-我看不到控制台应用程序中的列表不知道你的意思,你能在问题的末尾添加新的有问题的代码吗?你是在问如何在查看后输出整个
列表而不是在循环中输出它吗?如果是这样,你可以放置
outputLines.ForEach(x=>console.WriteLine(x))
就在
控制台之前。ReadLine
但归根结底是基本相同的。如果您的第二个问题是“如何将字符串列表输出到控制台?”然后,您可以参考这个非常深入的答案:。此外,如果此处的任何答案解决了您的初始问题,请您单击旁边的勾号将其标记为已接受的答案,然后单击您认为至少有用的任何答案旁边的向上箭头。不确定您是如何将答案标记为有用的,但似乎没有UPO投票n没有任何答案,也不是公认的答案。我不打算进一步讨论这个问题,但由于您是该网站的新用户,我只想告诉您预期结果。此解决方案在编写代码方面非常优雅,但需要在完整数组中迭代一次,然后再在筛选数组中迭代一次,因此如果有许多结果