首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何迭代二维数组

如何迭代二维数组
EN

Stack Overflow用户
提问于 2011-03-19 11:00:31
回答 3查看 5.4K关注 0票数 0

我有两个列表,我将它们转换为一个单一的两个双中间角数组,如下所示:

代码语言:javascript
复制
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];
}

现在,我试图通过这个数组进行测试,但每条线路的电压和电流值都是相同的:

代码语言:javascript
复制
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 。

正如您在第一条线路中看到的,电压和电流都是相同的值,即电压,而在第二条线路上,它们又是相同的,但这次是电流值。我怎么才能解决这个问题?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-03-19 11:05:56

我建议不要为此使用多维数组。

相反,您可以创建一个类似于这样的类:

代码语言:javascript
复制
class Measurement
{
    public double Voltage { get; set; }
    public double Current { get; set; }
}

并更改方法以返回IEnumerable<Measurement>。在.NET 4.0中,您可以使用Zip

代码语言:javascript
复制
public IEnumerable<Measurement> GetCurveDataForTestType()
{
    return voltage.Zip(current,
        (v, c) => new Measurement { Voltage = v, Current = c});
}

对于较早版本的.NET:

代码语言:javascript
复制
public IEnumerable<Measurement> GetCurveDataForTestType()
{
    for (int i = 0; i < voltage.Count(); i++)
    {
        yield return new Measurement
        {
            Voltage = voltage[i],
            Current = current[i]
        };
    }
}

然后,您的代码变成:

代码语言:javascript
复制
foreach (Measurement data in ztr.GetCurveDataForTestType())
{
    richTextBox1.AppendText(
        "Voltage: {0} ---------  Current: {1}", data.Voltage, data.Current);
}
票数 2
EN

Stack Overflow用户

发布于 2011-03-19 11:05:18

您使用的循环类型与创建数组时相同:

代码语言:javascript
复制
for (int i = 0; i < data.GetLength(0); i++) {
  richTextBox1.AppendText("Voltage" + data[i, 0] + "    ---------    ");
  richTextBox1.AppendText("Current" + data[i, 1] + "\r\n");
}
票数 1
EN

Stack Overflow用户

发布于 2011-03-19 11:27:16

更新:这个问题似乎是的重复。链接的答案有一个替代的解决方案,可以通过从二维数组切换到数组来使用foreach。

带有二维数组的foreach将依次返回数组中的每个双值(按设计)。

例如,给定以下二维双倍数组:

代码语言:javascript
复制
var array = new double[,] { { 0, 1, }, { 2, 3 }, { 4, 5 } };

foreach (var d in array)
{
    Console.WriteLine(d);
}

您将得到以下控制台输出:

代码语言:javascript
复制
0
1
2
3
4
5

因此,并不适合您需要。您应该使用for循环。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5361651

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档