C# 在C中用3个数组组织数据

C# 在C中用3个数组组织数据,c#,arrays,loops,matrix,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个数组ar

我正在制作一个自动化数据消息传递的程序

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

将excel数据直接加载到数据集是最简单的方法

如果你想要一个3D阵列,我建议 元组作为每行的数据保持器


列表将保存您的所有数据。

此结构可能保存您的数据

public class MyTypes
    {
        public string TypeName;
        public List<NamesValues> Names;
    }


    public class NamesValues
    {
        public string Name;
        public List<int> Values;
    }

你应该使用字典

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]);
        }
    }
}
将数据存储在某些列表中并非更简单、更清晰,例如:

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

我不是舒尔,这正是您想要的分组类型。

在数据表/数据集中加载数据。如果您不知道如何将excel传输到数据集,我可以为您提供代码。我已经将数据加载到3个不同的数组中。我希望数据看起来像Max-A 144-B 344-C 223 Sam-A 343-B 23好的,伙计,祝你好运。也许有人会回答你。在你的问题中,什么是索引,什么是数据并不十分清楚。我假设您希望按名称属性对数据进行索引。您应该使用PatientData存储类型和值的字典。@Matty您可以根据您在问题中发布的数据发布您想要得到的结果吗?