【发布时间】:2016-07-16 17:09:46
【问题描述】:
我在 C# 中名为 Cluster 的类中有一个用于聚类目的的字典:
Dictionary<int, List<ClusterMember>>
而int 代表cluster id,List<ClusterMember>> 代表cluster id 中的成员,ClusterMember 是另一个类.我在这里展示了整个代码结构:
public class ClusterMember
{
public string _name { get; set; }
}
public class Cluster
{
public Dictionary<int, List<ClusterMember>> _dic { get; set; }
public Cluster(int _id, List<ClusterMember> _clusMem)
{
_dic.Add(_id, _clusMem);
}
}
而我在这个方法中使用了这些类:
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(?);
// How to Add cluster using above classes
// How to Add cluster Member using above classes
_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 );
myClusters.Add(cluster);
}
else
{
// Add _customer.ElementAt(_memberNumber+=1) to Old Cluster
}
}
return myClusters;
}
现在如何在for loop 中添加Dictionary 的_dic 对象?此外,我可能不得不多次将多个集群成员添加到同一个_id
- 我可能会在迭代中向
_id = 1添加一个集群成员, - 然后必须添加一个集群成员到另一个
_id = 2迭代, - 然后它可能会转而将另一个集群成员添加到相同的 id,即
_id = 1,反之亦然。
此外,如果可以使用1(而不是0默认_dicindex)。
【问题讨论】:
-
您能出示您的
for loop代码吗? -
我会考虑从 Cluster 类中删除您的集群字典,因为它实际上应该只封装单个集群及其功能。也许考虑创建一个 ClusterDictionary 类并在其中添加用于添加集群成员/删除集群成员的功能。
-
@kienct89 我已经展示了整个
method包含for loop以及
标签: c# list dictionary nested add