C# 在foreach循环中运行for循环

C# 在foreach循环中运行for循环,c#,C#,我必须用这种格式写内容 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

我必须用这种格式写内容

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

}
类点
{
字符串名;
双[]X;
双[]Y;
}
类点集合
{
列出要点
}
//现在,当访问PointCollection时
foreach(点集合中的点)
{
stream.Write(aPoints.Name)
//现在我必须写出value1和valued2
}
可能代码
//现在,当访问PointCollection时
foreach(点集合中的点)
{
stream.Write(aPoints.Name)
int length1=aPoints.Real;
int length2=aPoints.Imag;
对于(int i=0;i

问题:在foreachloop中使用for循环是否正确?

是的,除非我在继续之前确保
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();
}
但这只是在炫耀,并不能真正让代码更清晰。我觉得你的版本更好更中肯


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

是的,但我会确保
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();
}
但这只是在炫耀,并不能真正让代码更清晰。我觉得你的版本更好更中肯


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

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

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

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

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

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

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

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


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

我将使用StringBuilder进行优化,并且对每个循环只调用一次stream.Write()。
除此之外,在读取实际数组的长度时有一点错误,但我想这只是一个键入错误

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()); 
} 
StringBuilder sb=新建StringBuilder();
//现在,当访问PointCollection时
foreach(点集合中的点)
{ 
(某人清楚地);
某人附上(姓名);
int length1=aPoints.Real.Lenght;//获取实数数组的长度
//int length2=aPoints.Imag;//不需要???
对于(int i=0;i
我将使用StringBuilder进行优化,并对每个循环只调用一次stream.Write()。
除此之外,在读取实际数组的长度时有一点错误,但我想这只是一个键入错误

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()); 
} 
StringBuilder sb=新建StringBuilder();
//现在,当访问PointCollection时
foreach(点集合中的点)
{ 
(某人清楚地);
某人附上(姓名);
int length1=aPoints.Real.Lenght;//获取实数数组的长度
//int length2=aPoints.Imag;//不需要???
对于(int i=0;i
可以将内部循环移动到其他方法,使其看起来整洁。可以将内部循环移动到其他方法,使其看起来整洁。