0

この形式で内容を書かなければなりません

somename1  value1 value2 value1 value2 ....
somename2  value1 value2 value1 value2 ....
somename3  value1 value2 value1 value2 ....
somename4  value1 value2 value1 value2 ....
somename5  value1 value2 value1 value2 ....

value1 と value2 はポイントの x 座標と y 座標の一部であるため、このためにクラスを作成しました。

class Points
{
 string name;
 double[] X;
 double[] Y;
}

class PointsCollection
{
  List<Points> aPoints
}

//now when accessing the PointCollection
foreach(Points aPoints in PointsCollection)
{
   stream.Write(aPoints.Name)
   //now i have to write the value1 and valud2

}

possible code

//now when accessing the PointCollection
foreach(Points aPoints in PointsCollection)
{
   stream.Write(aPoints.Name)
   int length1 = aPoints.Real;
   int length2 = aPoints.Imag;
   for(int i = 0 ; i < length1; i++)
   {
            stream.Write(aPoints.Real[i]);
            stream.Write(",");
            stream.Write(aPoints.Imag[i]);

    }
     stream.WriteLine();

}

質問 : foreachloop 内で for ループを使用するのは正しいですか?

4

4 に答える 4

5

はい、foreach (または foreach の foreach) での for ループのネストは正しいです!

于 2012-04-27T07:58:43.273 に答える
1

foreachループ内でforループを使用するのは正しいですか?

ループ内のループ(「ネストされたループ」)は通常のアプローチです。C#のような言語を使用すると、制御構造(ループ、、if...)を相互に自由にネストできます。これがなければ、多くの問題を解決するのは難しいでしょう。

唯一の危険は、関数を長くし、理解と維持を困難にすることです。解決策は、内部制御構造を独自のメソッドに分割することです。

于 2012-04-27T08:00:29.807 に答える
0

length1はい、そうですが、先に進む前にとlength2が等しいことを確認します ;)

これを行うこともできます:

foreach(Points aPoints in PointsCollection) 
{
   stream.Write(aPoints.Name)
   foreach (var complexNumber in aPoints.Real.Zip(aPoints.Imag,
       (real, imag) => new { Real = real, Imag = imag }))
   {
        stream.Write(complexNumber.Real);
        stream.Write(",");
        stream.Write(complexNumber.Imag);

   }
   stream.WriteLine();
}

しかし、それは見せびらかすだけで、実際にコードをより明確にするわけではありません。あなたのバージョンはより素晴らしく、より要点に合っていると思います...

ああ、コードを実行してみてください。書式設定がうまくいかず、最初に少しいじる必要があるからです ;)

于 2012-04-27T07:58:35.060 に答える
0

StringBuilderを使用して最適化し、ループごとに stream.Write() を 1 回だけ呼び出します。
それ以外に、実数配列の長さの読み取りに少しエラーがありますが、ここでは単なるタイプミスだと思います。

StringBuilder sb = new StringBuilder();
//now when accessing the PointCollection 
foreach(Points aPoints in PointsCollection) 
{ 
   sb.Clear();
   sb.Append(aPoints.Name);
   int length1 = aPoints.Real.Lenght;  // Get the length of Real array
   // int length2 = aPoints.Imag; // Not needed???
   for(int i = 0 ; i < length1; i++) 
   { 
        sb.AppendFormat("{0},{1} ", aPoints.Real[i], aPoints.Imag[i]); 
   } 
   sb.AppendLine(); 
   stream.Write(sb.ToString()); 
} 
于 2012-04-27T08:03:44.123 に答える