使用C#中的3个数组组织数据

时间:2014-10-10 08:35:43

标签: c# arrays loops matrix

我正在制作一个自动化数据信息的程序。

我有一个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]使数据看起来像这样。相同类型的所有值都应属于同一个名称,并且所有值应加在一起以形成总值。

4 个答案:

答案 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) };

我并不感到它正是你正在寻找的(分组类型)。