Beispiel #1
0
        /// <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);
        }
Beispiel #2
0
 public int Compare(VerticalIndexNode <T> x, VerticalIndexNode <T> y)
 {
     return(x.BeginIndex - y.BeginIndex);
 }
Beispiel #3
0
 public int Compare(VerticalIndexNode <T> x, VerticalIndexNode <T> y)
 {
     return(LocalComparer.Compare(x.FirstItem, y.FirstItem));
 }