所以,我有一个排序字典:
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,然后复制&#39; 3成为具有Id和Key 4的基因。
ToString()返回的字符串将具有Gene1 Gene4 Gene3
的顺序我相信我必须错误地使用删除和添加功能,因为我在此程序的F#实现中也会出现此问题,该实现也使用字典。
答案 0 :(得分:0)
您排序后的字典在哪里?
private Dictionary<int, Gene> genes;
这不会创建排序的字典。为了创建排序字典,您应该使用:
private SortedDictionary<int, Gene> genes;
然后使用
在需要的地方对其进行初始化genes = new SortedDictionary<int, Gene>();