可以迭代两个容器吗?

时间:2012-01-08 11:48:19

标签: c# .net iteration

我有以下代码:

        List<Point> xyData = new List<Point>();
        for (int i = 0; i < xdata.Length;i++ )
        {
            xyData.Add(new Point(xdata[i], ydata[i]));
        }

我想同时迭代 xdata ydata ,它们具有相同的长度

现在,我可以添加另一个计数器,

        int i=0;
        List<Point> xyData = new List<Point>();
        foreach (double x in xdata){
            var  y = ydata[i];
            xyData.Add(new Point(x, y));
        }

但我想写这样的东西(伪代码,不编译)

        List<Point> xyData = new List<Point>();
        foreach (double x in xdata, double y in ydata){
            xyData.Add(new Point(x, y));
        }

有没有一种优雅的方式来实现我想要的目标?

修改

我的意思是我希望得到一个这样的列表: [X0,Y0],[X1,Y1],[X2,Y2]。 抱歉模棱两可。

3 个答案:

答案 0 :(得分:3)

你的第一个选择绝对没问题 - 这是实现这一目标的好方法。

如果您可以使用LINQ,则可以使用Zip扩展方法将两个集合连接在一起:

var points = xdata.Zip(ydata, (x, y) => new Point(x, y));

答案 1 :(得分:3)

这是什么意思? 注意数组中的索引

    List<Point> xyData = new List<Point>();
    for (int i = 0; i < xdata.Length;i++ )
    {
        xyData.Add(new Point(xdata[i], ydata[i]));
    }

答案 2 :(得分:2)

使用LINQ。

如果你想要笛卡尔乘积(x1,y1)(x1,y2)(x2,y1)(x2,y2)

var xyData = xData.SelectMany(yData,(x,y)=>new Point(x,y)).ToList();

如果您想要合并列表(x1,y1)(x2,y2)

var xyData = xData.Zip(yData,(x,y)=>new Point(x,y)).ToList();