我有以下代码:
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]。 抱歉模棱两可。
答案 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();