2016-09-06 16 views
1

私は多くの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(); 
    } 
} 
+0

あなたは、あなたが使用している言語でタグをしてください追加することはできますか? – AgataB

+1

配列を作成してoutputLineを追加し続けることはできませんか? –

+0

これは賢明な考えのように思えます。私はそれをFORループの外で宣言していると仮定しますが、新しい配列に追加し続ける方法は? – AjK

答えて

0

すべての1行を追加する必要がある場合に備えて、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#の場合 はただ、あなたがList<string>のために、この

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

    } 
+0

これは実際にはC#ですが、あなたの答えはとにかく保持されています。 – sokkyoku

1

よりもむしろC#での宣言で、そのサイズを定義する必要がありarray、のような何かを探しています。あなたはより良いあなたのファイルの先頭にusing System.Collections.Genericを追加し、そのようにコードを変更Listarray

の違いを理解することがarrayに要素を追加する方法についてthis answerを参照したい場合があります。そして、

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

+0

ありがとう - これは良いです。これにより、 "outputLine"リストに "outputLine"が追加されます。しかし、私が "outputLine"から "outputLines"への出力をコンソールアプリケーションで変更した場合、コンソールアプリケーションのリストは表示されません。 – AjK

+0

あなたの質問の最後に新しい問題のあるコードを追加できますか?あなたはループの間に出力するのではなく、あなたの外見の後で 'List'全体を出力する方法を尋ねていますか? もしそうなら、あなたは 'outputLines。ForEach(x => Console.WriteLine(x)) 'を' Console.ReadLine'の直前に置きますが、基本的には同じです。 – sokkyoku

+0

2番目の質問が「コンソールに文字列のリストを出力するにはどうすればいいですか?あなたはこの非常に深い答えを参照することができます:http://stackoverflow.com/a/949955/2830652。 – sokkyoku

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); 
} 
+0

この解決法は書かれたコードの点ではエレガントですが、一度完全な配列を繰り返した後、フィルタリングされた配列をもう一度繰り返す必要があります。多くの結果とパフォーマンスが懸念される場合は、良いol 'ループ – sokkyoku

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

・ホープこのことができます:)

関連する問題