/// <summary> /// 获取元素在水平表中的位置. /// </summary> /// <param name="containItem"></param> /// <param name="containIndex"></param> /// <param name="comparer"></param> /// <returns></returns> private int GetHorizontalTable(T containItem, int containIndex, IComparer <T> comparer) { var localStruct = new VerticalIndexNode <T> { FirstItem = containItem, BeginIndex = containIndex }; if (comparer != null)//使用给定比较器. { _verticalComparer.LocalComparer = comparer; } int index = _verticalIndex.BinarySearch(localStruct, (containIndex < 0) ? _verticalComparer : (IComparer <VerticalIndexNode <T> >)_indexComparer); if (comparer != null)//恢复默认的比较器. { _verticalComparer.LocalComparer = _defaultComparer; } if (index < 0) { if (~index < _verticalIndex.Count) { if (~index <= 1) { return(0); } return(~index - 1); } return(_verticalIndex.Count - 1); } return(index); }
public int Compare(VerticalIndexNode <T> x, VerticalIndexNode <T> y) { return(x.BeginIndex - y.BeginIndex); }
public int Compare(VerticalIndexNode <T> x, VerticalIndexNode <T> y) { return(LocalComparer.Compare(x.FirstItem, y.FirstItem)); }