在 foreach 循环中运行 for 循环

本文关键字:循环 for 运行 foreach | 更新日期: 2023-09-27 18:32:29

我必须用这种格式编写内容

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中使用forloop是否正确?

在 foreach 循环中运行 for 循环

是的,在foreach(或foreach in for)中嵌套循环是正确的!

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

循环

中的循环 - "嵌套循环" - 是一种正常方法。像 C# 这样的语言允许你自由地将控制结构(循环、if 等)嵌套在彼此内部。没有这一点,许多问题将更难解决。

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

是的,除了我会确保length1length2相等,然后再继续;)

您也可以这样做:

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

但这只是炫耀,并不能真正使您的代码更清晰。我认为你的版本更好,更切中要害......

哦,尝试运行代码,因为您的格式不正常,您需要先对其进行一些修补;)

我将使用 StringBuilder 进行优化,并且只对流进行一次调用。每个循环的 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()); 
}