/// <summary> /// 向当前集合中添加一个节点元素,按节点名字顺序决定加入的位置 /// </summary> /// <param name="node">要加入的节点</param> /// <param name="style">如何加入</param> /// <param name="comparer">用于比较大小的接口</param> public override void insertSequence(MarcNode node, InsertSequenceStyle style = InsertSequenceStyle.PreferHead, IComparer <MarcNode> comparer = null) { base.insertSequence(node, style, comparer); node.Parent = owner; }
public virtual void insertSequenceReverse(MarcNode node, InsertSequenceStyle style = InsertSequenceStyle.PreferHead, IComparer <MarcNode> comparer = null) { if (comparer == null) { comparer = new MarcNodeComparer(); } // 寻找插入位置 List <int> values = new List <int>(); // 累积每个比较结果数字 int nInsertPos = -1; for (int i = this.count - 1; i >= 0; i--) { MarcNode current = this[i]; int nBigThanCurrent = 0; // 相当于node和当前对象相减 nBigThanCurrent = comparer.Compare(node, current) * -1; if (nBigThanCurrent < 0) { nInsertPos = i + 1; break; } if (nBigThanCurrent == 0) { if ((style & InsertSequenceStyle.PreferTail) != 0) { nInsertPos = i; break; } } // 刚刚遇到过相等的一段,但在当前位置结束了相等 (或者开始变大,或者开始变小) if (nBigThanCurrent != 0 && values.Count > 0 && values[values.Count - 1] == 0) { if ((style & InsertSequenceStyle.PreferHead) != 0) { nInsertPos = i; break; } } values.Add(nBigThanCurrent); } if (nInsertPos == -1) { this.m_list.Insert(0, node); return; } this.m_list.Insert(nInsertPos, node); }
/// <summary> /// 向当前集合中添加一个节点元素,按节点名字顺序决定加入的位置 /// </summary> /// <param name="node">要加入的节点</param> /// <param name="style">如何加入</param> /// <param name="comparer">用于比较大小的接口</param> public override void insertSequence(MarcNode node, InsertSequenceStyle style = InsertSequenceStyle.PreferHead, IComparer<MarcNode> comparer = null) { base.insertSequence(node, style, comparer); node.Parent = owner; }