我目前有一个NElement
个对象的HashSet。每个NElement
对象都有一个唯一的Element
字段和一个整数n。
以下是我需要对数据进行的两项操作:
Element e
,在集合中搜索具有NElement
的{{1}}实例并对其进行处理。以下是#2的例子:
e
我认为有一种更好的方法可以使用List或Set之外的集合来实现此目的。有什么建议吗?
答案 0 :(得分:2)
可能的解决方案将是一个不同的设计。分子式由一系列元素以及有多少元素组成。因此,一个可能的解决方案是拥有一个包含此信息的MolecularFormula
类,该类基于
Map<Element, int>
。
一个可能的例子:
public class MolecularFormula
{
private Map<Element, int> elements = new HashMap<Element, int>();
//... Constructors etc
//A list to iterate through all values
public List<NElement> getElements()
{
List<NElement> retList = new ArrayList<NElement>();
foreach(Element e : elements)
{
retList.put(new NElement(e, elements.get(e));
}
return retList;
}
//To add something
public void add(Element e, int num)
{
if(elements.containsKey(e))
{
int newNum = elements.get(e) + num;
elements.remove(e);
elements.put(e, newNum);
}
else
{
elements.put(e, num);
}
}
}
这是匆匆放在一起,根本不是很有效,但它应该让你知道一个可能的选择。
答案 1 :(得分:1)
尝试使用SMARTS,SMILES,InChi或ASL。我相信前两个是开源的。 InChi由IUPAC维护,可以很好地用于数据库使用。 ASL是Schrödinger, Inc的专有,但如果您已经在使用Schrödinger软件,我建议您直接使用他们的Python API。
使用这些工具中的任何一种,您都可以找到由SMARTS / SMILES / ASL描述的分子内的特定SMARTS / SMILES / ASL字符串描述的功能组(或原子)。