C# Foreach重复内部值…这应该很简单!

C# Foreach重复内部值…这应该很简单!,c#,C#,嵌套循环不是您想要的。内部循环将为外部循环的每个元素整体运行 如果两个数组的元素数相同,只需执行一个循环,同时对两个数组执行所有操作 float [] pt1x = {0.580f, 0.680f, 0.780f}; float [] pt1y = {1.128f, 1.228f, 1.328f}; for (int i=0; i < pt1x.Length; i++) { Console.Writeline("xpt = " + pt1x[i])

嵌套循环不是您想要的。内部循环将为外部循环的每个元素整体运行

如果两个数组的元素数相同,只需执行一个循环,同时对两个数组执行所有操作

float [] pt1x = {0.580f, 0.680f, 0.780f};  
float [] pt1y = {1.128f, 1.228f, 1.328f};  

    for (int i=0; i < pt1x.Length; i++)
    {
        Console.Writeline("xpt = " + pt1x[i]);
        Console.Writeline("ypt = " + pt1y[i]);
    }

嵌套循环不是您想要的。内部循环将为外部循环的每个元素整体运行

如果两个数组的元素数相同,只需执行一个循环,同时对两个数组执行所有操作

float [] pt1x = {0.580f, 0.680f, 0.780f};  
float [] pt1y = {1.128f, 1.228f, 1.328f};  

    for (int i=0; i < pt1x.Length; i++)
    {
        Console.Writeline("xpt = " + pt1x[i]);
        Console.Writeline("ypt = " + pt1y[i]);
    }
但您应该使用System.Drawing.Point


但是您应该使用System.Drawing.Point

这看起来像是值对。字典不是更好吗

  for each x
    print x
    for each y
       print y

这看起来像是值对。字典不是更好吗

  for each x
    print x
    for each y
       print y

这里有一个稍微稳健的解决方案,它使用了与其他解决方案相同的原理,但适用于任意数量的阵列:

Dictionary<float, float> floats = new Dictionary<float, float>();

            floats.Add(0.580f, 1.128f);
            floats.Add(0.680f, 1.228f);
            floats.Add(0.780f, 1.328f);

            floats.Keys.ToList().ForEach(f =>
                {
                    Console.WriteLine(String.Format("key: {0} value: {1}", f, floats[f]));
                });

这里有一个稍微稳健的解决方案,它使用了与其他解决方案相同的原理,但适用于任意数量的阵列:

Dictionary<float, float> floats = new Dictionary<float, float>();

            floats.Add(0.580f, 1.128f);
            floats.Add(0.680f, 1.228f);
            floats.Add(0.780f, 1.328f);

            floats.Keys.ToList().ForEach(f =>
                {
                    Console.WriteLine(String.Format("key: {0} value: {1}", f, floats[f]));
                });

如果迁移到.NET 4.0,则可以使用,否则可以在.NET 3.5中将其作为扩展方法实现。Eric Lippert在他的博客文章中给出了这样一个实现的示例:

下面是它的使用方法:

0.580
1.128
0.680
1.228
0.780
1.328
请注意,您可能希望在lambda表达式的串联部分将xpt更改为xpt.ToString,以便更好地控制返回类型


编辑:切换到Eric Lippert文章的实现链接,因为它会在继续之前检查参数。

如果移动到.NET 4.0,则可以使用,否则可以在.NET 3.5中将其实现为扩展方法。Eric Lippert在他的博客文章中给出了这样一个实现的示例:

下面是它的使用方法:

0.580
1.128
0.680
1.228
0.780
1.328
请注意,您可能希望在lambda表达式的串联部分将xpt更改为xpt.ToString,以便更好地控制返回类型


编辑:切换到Eric Lippert帖子的实现链接,因为它会在继续之前检查参数。

您在该网站上已经呆了41天,并发布了12个问题。恕我直言,到目前为止,您应该知道如何确保问题中的代码是可读的:更新:ArsenMkrt在这一次为您提供了足够的帮助,但如果您自己继续这样做会更好。您已经在该网站上呆了41天,发布了12个问题。恕我直言,到目前为止,您应该知道如何确保问题中的代码是可读的:更新:ArsenMkrt在这种情况下很乐意为您这样做,但如果您自己继续这样做会更好。考虑到提供的输入,这是一个完全可以接受的解决方案;请参阅我的答案,了解使用相同方法但有额外保护措施的替代方案,例如检查阵列的长度和可变数量的输入。考虑到提供的输入,这是一个完全可以接受的解决方案;请参阅我的答案,了解使用相同方法但有额外保护措施的替代方案,例如,检查数组的长度和可变数量的输入。我更倾向于使用PointF。我更倾向于使用PointF。这正是我所需要的,只需在此处稍加编辑:对于int I=0;i0.580 1.128 0.680 1.228 0.780 1.328
float[] pt1x = {0.580f, 0.680f, 0.780f}; 
float[] pt1y = {1.128f, 1.228f, 1.328f}; 

var result = pt1x.Zip(pt1y, (xpt, ypt) =>
                    "xpt = " + xpt + Environment.NewLine + "ypt = " + ypt);

foreach (var item in result)
    Console.WriteLine(item);