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

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

问题描述

对于在C#中使用2D数组的报废解决方案,我必须在任何数据结构中存储两种类型的信息。我必须存储为:

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 数据类型
  • $ b $中b
  • number of cluster in int data type
  • cluster membership count in int data type

如果我将2D数组用作:

If I use a 2D array as:

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

但是这里的问题是:


  • 我不知道集群的总数 是多少?

  • 我不知道集群的数量是多少每个集群都会有?

  • I don't know what total number of cluster will be?
  • I don't know what number of members each cluster will have?

所以问题是:
我如何设法将这些信息存储在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;
    }




  • 如何更新方法要获得理想的结果?

    • How should I update my method to get desired results?
    • 推荐答案

      您应该考虑制作两种类型,一种集群,一个集群成员:

      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#中替代2D数组的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

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