在 C# 中替代二维数组 [英] Alternate to 2D array in C#

查看:41
本文介绍了在 C# 中替代二维数组的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我必须在任何数据结构中存储两种类型的信息,以便我在 C# 中提出二维数组的废料解决方案.我必须存储为:

I have to store two types of information in any data structure for what I came up with the scrap solution of 2D array in C#. I have to store as:

  • 簇数 int 数据类型
  • 集群成员计数 int 数据类型
  • number of cluster in int data type
  • cluster membership count in int data type

如果我使用二维数组:

Int32[,] _clusterMembership = new Int32[10, 10];

但这里的问题是:

  • 我不知道集群总数是多少?
  • 我不知道每个集群将有多少成员?

所以问题是:如何在 C# 中存储这些信息?

附录
我必须在此方法中使用此问题的答案:

ADDENDUM
I have to use answer from this question here in this method as:

   public static List<Cluster> DP_Cluster(List<string> _customer, double _alpha)
    {
        var _currentClusters = 0;     // current number of clusters i.e. "k"
        var _memberNumber = 0;    // running member number i.e. "n"
        //var _dic = new Dictionary<int, List<string>>();
        var _probOld = 0.0;
        var _probNew = 0.0;


        List<Cluster> myClusters = new List<Cluster>();
        Cluster cluster = new Cluster(_currentClusters += 1);
        cluster.Members.Add(new ClusterMember { Name = _customer.ElementAt(_memberNumber) });
        myClusters.Add(cluster);

        //_dic.Add(_currentClusters, _customer.ElementAt(_memberNumber));
        _currentClusters += 1;

        for(int _i = 1; _i < _customer.Count - 1; _i++)
        {
            if( _i <= _currentClusters)
            {
                _probOld = myClusters[_i].Members.Count / ((_i+1) - 1 + _alpha);
            }
            else
            {
                _probNew = _alpha / ((_i+1) - 1 + _alpha);
            }

            if(_probNew > _probOld)
            {
                // Add _customer.ElementAt(_memberNumber+=1) to New Cluster
                Cluster cluster = new Cluster( _currentClusters += 1 ); // Here is an error as we defining same name for another cluster
                myClusters.Add(cluster);
            }
            else
            {
                // Add _customer.ElementAt(_memberNumber+=1) to Old Cluster
            }
        }

        return myClusters;
    }

  • 我应该如何更新我的方法以获得想要的结果?
  • 推荐答案

    你应该考虑制作两种类型,一种用于集群,一种用于成员:

    You should consider making two types, one for the clusters and one for the members:

    成员

    public class ClusterMember
    {
        public string Name {get;set;}
        // more properties...
    }
    

    集群

    public class Cluster
    {
        public int ID {get;}
        public List<ClusterMember> Members {get;}
        public Cluster(int id)
        {
            ID = id;
            Members = new List<ClusterMember();
        }
    }
    

    然后您可以将集群存储在列表中

    And then you can store your clusters in a list

    List<Cluster> myClusters = new List<Cluster>();
    Cluster cluster = new Cluster(1);
    cluster.Members.Add(new ClusterMember { Name = "Member1" });
    myClusters.Add(cluster);
    

    更新 我假设您想对数据做更多的事情,而不仅仅是存储这两个信息,并试图提供更好的面向对象的方法.

    UPDATE I assumed that you want to do more with your data than just store these two information and tried to provide a better object-oriented approach.

    要获得您的计数:

    int totalNumberOfClusters = myClusters.Count;
    int numberOfMembersInOneCluster = cluster.Members.Count;
    int totalNumberOfClusterMembers = myClusters.Sum(c => c.Members.Count);
    

    并输出每个集群的成员数:

    And to output the number of members for each cluster:

    foreach(Cluster c in myClusters)
        Console.WriteLine($"Cluster {c.ID} has {c.Members.Count} members.");
    

    这篇关于在 C# 中替代二维数组的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆