所以,我有一个排序字典:
private Dictionary<int, Gene> genes;
我添加了具有以下功能的配对:
public void createGene(int geneId)
{
genes.Add(geneId, new Gene(geneId));
}
在连接两个基因从而删除一个基因并将新序列插入两个基因之一的功能中。我像这样从字典中删除了一个基因,然后用它的新序列更新另一个基因:
species[specieId].getGenes().Remove(geneTwoId);
species[specieId].getGene(geneOneId).setSequence(newSequence);
继续使用以下函数添加另一对(Id和Gene):
public void duplicate(int specieId, int newGeneId, int oldGeneId)
{
species[specieId].createGene(newGeneId);
string duplicateSeq = species[specieId].getGene(oldGeneId).getSequence();
species[specieId].getGene(newGeneId).createSequence(duplicateSeq);
}
但后来当我迭代列表时
public override string ToString()
{
string specieString = "";
foreach(var entry in genes)
{
Console.WriteLine("Current gene: {0}", entry.Key);
specieString += ">SE" + id + "_" + entry.Value.ToString();
}
return specieString;
}
返回的字符串不会按键排序,例如,我有基因1、2、3。对2和3进行融合,从而去除2,然后将3"复制"到具有Id和Key 4的基因中。
ToString()返回的字符串的顺序为Gene1 Gene4 Gene3
我相信我一定是错误地使用了Remove和Add函数,因为这个程序的F#实现也使用了dictionary的。
排序字典在哪里?
private Dictionary<int, Gene> genes;
这不会创建排序词典。为了创建一个排序字典,您应该使用:
private SortedDictionary<int, Gene> genes;
然后在需要的地方使用进行初始化
genes = new SortedDictionary<int, Gene>();