我对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。我不知道是否可以在同一个数组中包含两种类型的数据,或者我应该使用一个我不知道的对象或其他东西。
你认为有什么好的解决方案吗?
答案 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>
或某些可用的对类型,例如KeyValuePair
或Tuple
。
使用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;只要对象变量中的数据与您的转换类型兼容,就可以将它们从一个转换为另一个。