如何创建数组的子集?

时间:2016-09-06 13:38:22

标签: c# arrays

我有一个包含许多string行的数组。

对于该数组中的每一行,如果满足条件, 我有一个控制台应用程序,显示数组中的行,并进行一些修改(我称之为outputLine)。

如何从outputLines

列表中创建数组
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();
    }
}

4 个答案:

答案 0 :(得分:1)

而不是array,它必须在C#声明时定义其大小,而不是寻找List<string>。您可能需要参考this answerarray添加元素,以便更好地理解Listarray

之间的区别

在文件顶部添加using 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();
    }
}

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

答案 1 :(得分:1)

为什么不首先使用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);
}

答案 2 :(得分:0)

声明一个容量为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);   
        }

    }

答案 3 :(得分:0)

如果您想要动态添加,请尝试使用列表而不是数组。例如;

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();
    }
}

希望这会有所帮助:)