【问题标题】:Organizing data with 3 arrays in C#在 C# 中用 3 个数组组织数据
【发布时间】:2023-03-16 15:58:01
【问题描述】:

我正在制作一个自动发送数据消息的程序。

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

【问题讨论】:

  • 加载数据表/数据集中的数据。如果您不知道如何将 excel 传输到 DataSet,我可以为您提供代码。
  • 我已经将数据加载到 3 个不同的数组中。我希望数据看起来像 Max - A 144 - B 344 - C 223 Sam - A 343 - B 23
  • 好的,你的电话,祝你好运。可能有人会回答你。
  • 在你的问题中,什么是索引,什么是数据并不是很清楚。我假设您想通过Name 属性对数据进行索引。您应该使用Dictionary<string, List<PatientData>> 其中PatientData 存储TypeValue
  • @Matty 您能否根据您在问题中发布的数据发布您想要获得的结果?

标签: c# arrays loops matrix


【解决方案1】:

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

如果你确实想要一个 3D 数组,我建议 Tuple<string, string, int> 作为每一行的数据持有者。

List<Tuple<string, string, int>> 将保存您的所有数据。

【讨论】:

    【解决方案2】:

    这个结构可能保存你的数据

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

    【讨论】:

      【解决方案3】:

      将您的数据存储在一些List&lt;YourObject&gt; 中并不更简单更干净,例如:

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

      我不确定它是否正是您正在寻找的(分组类型)。

      【讨论】:

        【解决方案4】:

        你应该使用字典。

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-05-13
          • 2021-06-21
          • 1970-01-01
          • 2013-12-14
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多