/// <summary> /// sorts atomArray. /// currently only works for array type syntax. /// </summary> /// <param name="sort"></param> public void Sort(CMLFormula.SortType sort) { var elems = ElementType; var counts = Count; var sortS = new List <string>(); { for (var i = 0; i < elems.Count; i++) { sortS.Add($"{elems[i]} {counts[i]}"); } } sortS.Sort(); if (sort == CMLFormula.SortType.AlphabeticElements) { ; // already done } else if (sort == CMLFormula.SortType.CHFirst) { var temp = new List <string>(); foreach (var s in sortS) { if (s.StartsWith("C ", StringComparison.Ordinal)) { temp.Add(s); } } foreach (var s in sortS) { if (s.StartsWith("H ", StringComparison.Ordinal)) { temp.Add(s); } } foreach (var s in sortS) { if (!(s.StartsWith("C ", StringComparison.Ordinal) || s.StartsWith("H ", StringComparison.Ordinal))) { temp.Add(s); } } sortS = temp; } var el = new string[sortS.Count]; var cl = new double[sortS.Count]; { for (int i = 0; i < sortS.Count; i++) { var ss = sortS[i].Split(' '); el[i] = ss[0]; cl[i] = double.Parse(ss[1], NumberFormatInfo.InvariantInfo); } } this.ElementType = el; this.Count = cl; }
public static string Name(this CMLFormula.SortType value) => namesSorts[(int)value];