使用for循环

时间:2017-12-12 12:48:54

标签: c# arrays

我对C#很陌生,我必须查看一些数据,计算每个数据的总和并将其保存到数组中,并保存它的名称。

所以,对于这样的输入:

name1 name2 name3 name4
1       1     3      0
0       0     4      5
0       0     0      0

我必须得到一个像这样的数组:

[["name1", 1], ["name2", 1], ["name3", 7], ["name4", 5]]

到目前为止,我设法计算总和并将它们保存到数组中,问题是当我想要添加它们的名称时。

这是我的代码:

int m = result.Sites.Count;
double[] sum = new double[result.Sites.Count];
for (int i = 0; i < m; i++)
{
    for (int j = 0; j < result.Sites[i].Actual.Count; j++)
    {
        sum[i] += (double)result.Sites[i].Actual[j];
    }

}

它可以很好地计算总和。

每个网站的名称都在result.Sites[i].SiteName

我试过这样:

double[][] sum = new double[result.Sites.Count];
for (int i = 0; i < m; i++)
{
    for (int j = 0; j < result.Sites[i].Actual.Count; j++)
    {
        sum[i][1] += (double)result.Sites[i].Actual[j];
    }
    sum[i][0] = result.Sites[i].SiteName;

}

它说它不能将字符串转换为double。我不知道是否可以在同一个数组中包含两种类型的数据,或者我应该使用一个我不知道的对象或其他东西。

你认为有什么好的解决方案吗?

4 个答案:

答案 0 :(得分:1)

如果您定义一个对象来存储您的信息,然后使用一点Linq来删除内部循环,那就简单多了。

public class SiteData
{
    public string Name {get;set;}
    public double Total {get;set;}
}
....

List<SiteData> summary = new List<SiteData>()
for (int i = 0; i < m; i++)
{
    SiteData aSite = new SiteData();
    aSite.Name = result.Sites[i].SiteName;
    aSite.Total = result.Sites[i].Actual.Sum();
    summary.Add(aSite);
}

答案 1 :(得分:0)

不,你不能拥有两种类型的数组。你需要使用一个类:

public class SiteInfo
{
    public string Name {get;set;}
    public double Sum {get;set;}
}

SiteInfo[] sum = new SiteInfo[result.Sites.Count];
for (int i = 0; i < m; i++)
{
    SiteInfo si = new SiteInfo();
    for (int j = 0; j < result.Sites[i].Actual.Count; j++)
    {
        si.Sum += (double)result.Sites[i].Actual[j];
    }
    si.Name = result.Sites[i].SiteName;

    sum[i] = si;
}

答案 2 :(得分:0)

您可以使用Dictionary<string, double>或某些可用的对类型,例如KeyValuePairTuple
使用LINQ扩展,它可以是:

var sums = result.Sites.ToDictionary(s => s.SiteName, s => s.Actual.Sum());
如果名称是唯一的,请

或转换为Activator.CreateInstance(type)

[
    object,
    uuid(XXXX-XXXX-XXXX-XX-XXXXXXXX),
    dual,
    helpstring("IMyClass Interface"),
    pointer_default(unique)
]
interface IMyClass : IDispatch
{
    ....
    id(100), helpstring("My Help String")]
    HRESULT MethodToInvoke([out, retval] unsigned short *pVal);
    ....
}

library MyLib
{
importlib("stdole32.tlb");
importlib("stdole2.tlb");
[
    uuid(XXXXX-XXXXX-XXXX-XXXX-XXXXX),
    helpstring("MyClass")
]
coclass MyClass
{
    [default] interface IMyClass;
};

答案 3 :(得分:-1)

将您的变量声明为&#39; object&#39;只要对象变量中的数据与您的转换类型兼容,就可以将它们从一个转换为另一个。