我正在制作一个自动化数据信息的程序。
我有一个Excel表格,其中包含名称列,类型列和值列。
看起来像这样:
Name Type Value
Sam A 32
Ben B 65
Sam B 213
max B 23
max C 24
max C 12
Ben C 45
这些数据并不真实,但它与我正在使用的数据类似。
注意:某些名称没有某些类型。
我已将数据加载到3个数组arrName[]
,arrType[]
和arrValue[]
我希望使用3D数组arrPro[name, type, value]
使数据看起来像这样。相同类型的所有值都应属于同一个名称,并且所有值应加在一起以形成总值。
答案 0 :(得分:0)
将excel数据直接加载到DataSet是最简单的方法。
如果您确实需要3D阵列,我建议
Tuple<string, string, int>
作为每行的数据持有者。
和
List<Tuple<string, string, int>>
将保留您的所有数据。
答案 1 :(得分:0)
此结构可能包含您的数据
public class MyTypes
{
public string TypeName;
public List<NamesValues> Names;
}
public class NamesValues
{
public string Name;
public List<int> Values;
}
答案 2 :(得分:0)
你应该使用字典。
public Enum EType
{
A,
B,
C
}
public class PatientData
{
public EType Type { get; set; }
public int Value {get; set; }
}
public class PatientManager
{
private readonly Dictionary<String, List<PatientData>> _patients = new Dictionary<String, List<PatientData>>();
public void AddPatientData(string name, EType type, int value)
{
var patientData = new PatientData
{
Type = type,
Value = value
};
List<PatientData> patientDatas;
if (!dictionary.TryGetValue(name, out patientDatas))
{
patientDatas = new List<PatientData>();
dictionary.Add(key, patientDatas);
}
_patientDatas.Add(patientData);
}
public void LoadData(string[] names, EType[] types, int[] values)
{
var iMax = Math.Min(names.Length, Math.Min(type.Length, values.Length));
for (var i = 0; i < iMax; i++)
{
AddPatientData(names[i], types[i], values[i]);
}
}
}
答案 3 :(得分:0)
更简洁,更清晰将数据存储在某些List<YourObject>
中,例如:
public class YourObject {
public string Name { get; set; }
public string Type{ get; set; }
public int Value { get; set; }
}
然后用linq计算你想要的东西(更少):
List<YourObject> yourObject = "your logic goes here (with whole data)";
List<YourObject> result = from s in yourObject
group s by new { s.Name, s. Type) into r
select new YourObject { Name = r.Name, Type = r.Type, Value = r.Sum(s => s.Value) };
我并不感到它正是你正在寻找的(分组类型)。