work hard work smart

专注于Java后端开发。 不断总结,举一反三。
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

调整数据列表内的顺序

Posted on 2012-06-18 12:10  work hard work smart  阅读(639)  评论(0编辑  收藏  举报

 调整数据列表内的顺序,现写成扩展方法工具类

    public static class CollectionHelper
    {
        //交换List项的顺序
        public static bool ExchangeOrder<T>(this IList<T> list, int sourceID, int newID)
        {
            if (sourceID >= list.Count || sourceID < 0 || newID >= list.Count || newID < 0 || sourceID == newID) return false;
            try
            {
                var temp = list[sourceID];
                list[sourceID] = list[newID];
                list[newID] = temp;
                return true;
            }
            catch (Exception)
            {
                return false;
            }
        }

        /// <summary>
        /// 向上移动
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="list">The 数据列表 list</param>
        /// <param name="id">The 需要移动的id</param>
        /// <param name="num">The 移动的 位数. 默认为1, 几位就向上移动几位</param>
        /// <returns></returns>
        public static bool MoveUpper<T>(this IList<T> list, int id, int num = 1)
        {
            return list.MoveItem(id, id - num);
        }

        //向下移动
        public static bool MoveDown<T>(this IList<T> list, int id, int num = 1)
        {
            return list.MoveItem(id, id + num);
        }

        //移动到顶部
        public static bool MoveTopper<T>(this IList<T> list, int id)
        {
            return list.MoveItem(id, 0);
        }

        //移动到底部
        public static bool MoveBottom<T>(this IList<T> list, int id)
        {
            return list.MoveItem(id, list.Count -1);
        }

        /// <summary>
        /// 移动
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="list">数据列表</param>
        /// <param name="sourceID">原来的数据ID</param>
        /// <param name="newID">移动后数据ID</param>
        /// <returns></returns>
        public static bool MoveItem<T>(this IList<T> list, int sourceID, int newID)
        {
            if (sourceID >= list.Count || sourceID < 0 || newID >= list.Count || newID < 0 || sourceID == newID) return false;
            try
            {
                var temp = list[sourceID];
                list.RemoveAt(sourceID);
                list.Insert(newID, temp);
                return true;
            }
            catch (Exception)
            {
                return false;
            }
        }
    }

 

 

调用的方法:

     class CollectionSample
    {

        public void Test()
        {
            List<Student> stuList = new List<Student>();
            Student stu = new Student(1, "zhangSan");
            stuList.Add(stu);
            stu = new Student(2, "LiSi");
            stuList.Add(stu);
            stu = new Student(3, "WangWu");
            stuList.Add(stu);
            stu = new Student(4, "ZhangLiu");
            stuList.Add(stu);
            string msg = string.Empty;
            foreach (Student item in stuList)
            {
                msg += String.Format("ID: {0}, Name: {1} ", item.id, item.name);
            }
            //Exchange(stuList);
            Move(stuList);
        }

        private static void Exchange(List<Student> stuList)
        {
            CollectionHelper.ExchangeOrder(stuList, 2, 1);

            string newMsg = string.Empty;
            foreach (Student item in stuList)
            {
                newMsg += String.Format("ID: {0}, Name: {1} ", item.id, item.name);
            }
        }

        private static void Move(List<Student> stuList)
        {
            CollectionHelper.MoveUpper(stuList, 2, 3);

            string newMsg = string.Empty;
            foreach (Student item in stuList)
            {
                newMsg += String.Format("ID: {0}, Name: {1} ", item.id, item.name);
            }
        }
    }