我有两个列表,我将它们转换为一个单一的两个双中间角数组,如下所示:
double[,] data = new double[voltage.Count(), 2];
for (int i = 0; i < voltage.Count(); i++)
{
data[i, 0] = voltage[i];
data[i, 1] = current[i];
}现在,我试图通过这个数组进行测试,但每条线路的电压和电流值都是相同的:
foreach (double data in ztr.GetCurveDataForTestType()) //this will return my array
{
richTextBox1.AppendText("Voltage" + data + " --------- ");
richTextBox1.AppendText("Current" + data + "\r\n");
}电压-0.175?电流-0.175。
电压-9.930625E-06-?电流-9.930625E-06。
电压0.171875?电流?0.171875?
电压-9.53375E-06-?电流-9.53375E-06。
电压-0.16875?电流-0.16875 。
正如您在第一条线路中看到的,电压和电流都是相同的值,即电压,而在第二条线路上,它们又是相同的,但这次是电流值。我怎么才能解决这个问题?
发布于 2011-03-19 11:05:56
我建议不要为此使用多维数组。
相反,您可以创建一个类似于这样的类:
class Measurement
{
public double Voltage { get; set; }
public double Current { get; set; }
}并更改方法以返回IEnumerable<Measurement>。在.NET 4.0中,您可以使用Zip
public IEnumerable<Measurement> GetCurveDataForTestType()
{
return voltage.Zip(current,
(v, c) => new Measurement { Voltage = v, Current = c});
}对于较早版本的.NET:
public IEnumerable<Measurement> GetCurveDataForTestType()
{
for (int i = 0; i < voltage.Count(); i++)
{
yield return new Measurement
{
Voltage = voltage[i],
Current = current[i]
};
}
}然后,您的代码变成:
foreach (Measurement data in ztr.GetCurveDataForTestType())
{
richTextBox1.AppendText(
"Voltage: {0} --------- Current: {1}", data.Voltage, data.Current);
}发布于 2011-03-19 11:05:18
您使用的循环类型与创建数组时相同:
for (int i = 0; i < data.GetLength(0); i++) {
richTextBox1.AppendText("Voltage" + data[i, 0] + " --------- ");
richTextBox1.AppendText("Current" + data[i, 1] + "\r\n");
}发布于 2011-03-19 11:27:16
更新:这个问题似乎是的重复。链接的答案有一个替代的解决方案,可以通过从二维数组切换到数组来使用foreach。
带有二维数组的foreach将依次返回数组中的每个双值(按设计)。
例如,给定以下二维双倍数组:
var array = new double[,] { { 0, 1, }, { 2, 3 }, { 4, 5 } };
foreach (var d in array)
{
Console.WriteLine(d);
}您将得到以下控制台输出:
0
1
2
3
4
5因此,并不适合您需要。您应该使用for循环。
https://stackoverflow.com/questions/5361651
复制相似问题