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 中)中嵌套 for 循环是正确的!

于 2012-04-27T07:58:43.273 回答
1

在 foreach 循环中使用 for 循环是否正确?

循环内的循环——“嵌套循环”——是一种正常的方法。if像 C# 这样的语言允许您在彼此之间自由嵌套控制结构(循环、...)。没有这么多问题将更难解决。

唯一的危险是使函数变得冗长且难以理解和维护:解决方案是将内部控制结构分解为它们自己的方法。

于 2012-04-27T08:00:29.807 回答
0

我将使用StringBuilder进行优化,并为每个循环只调用一次 stream.Write()。
除此之外,读取 Real 数组的长度有一点错误,但我想这只是 SO 上的打字错误。

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 回答
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 回答