首页 > 代码库 > 简易文件夹无限级,使用递归重构层级列表
简易文件夹无限级,使用递归重构层级列表
1 /// <summary> 2 /// 文件夹实体 3 /// </summary> 4 public class Folder 5 { 6 /// <summary> 7 /// 文件夹ID 8 /// </summary> 9 public int id { get; set; }10 /// <summary>11 /// 文件夹名称12 /// </summary>13 public string name { get; set; }14 /// <summary>15 /// 父级ID16 /// </summary>17 public int folder_parent_id { get; set; }18 }
1 /// <summary> 2 /// 重构文件夹层级列表 3 /// </summary> 4 /// <param name="listSource">源数据</param> 5 /// <param name="pId">父级ID</param> 6 /// <param name="count">添加元素的次数</param> 7 /// <param name="levelNum">当前层级</param> 8 /// <param name="listResult">返回结果集</param> 9 private void RefactorFolderLevelList(List<Folder> listSource, int pId, int count, List<int> levelNum, List<Folder> listResult)10 {11 var len_source = listSource.Count();12 if (count < len_source)13 {14 var tmp_list = listSource.Where(m => m.folder_parent_id == pId);15 var len_tmp_list = tmp_list.Count();16 bool addFlag = true;17 int level = levelNum.Count();18 int i = 0;19 foreach (var item in tmp_list)20 {21 i++;22 item.name = FillString(level, "——") + item.name;23 var model = listResult.Where(m => m.id == item.id).FirstOrDefault();24 if (pId == 0 && model != null)25 continue;26 else27 listResult.Add(item);28 ++count;29 if (listSource.Where(m => m.folder_parent_id == item.id).Count() > 0)30 {31 if (!levelNum.Contains(item.id) && addFlag)32 {33 addFlag = false;34 levelNum.Add(item.id);35 }36 RefactorFolderLevelList(listSource, item.id, count, levelNum, listResult);37 }38 else39 {40 if (i < len_tmp_list)41 continue;42 levelNum = new List<int>();43 RefactorFolderLevelList(listSource, 0, count, levelNum, listResult);44 }45 }46 }47 }48 /// <summary>49 /// 字符串填充50 /// </summary>51 /// <param name="n">填充的次数</param>52 /// <param name="str">需要填充的字符串</param>53 /// <returns></returns>54 private string FillString(int n, string str)55 {56 StringBuilder ret = new StringBuilder();57 for (int i = 0; i < n; i++)58 {59 ret.Append(str);60 }61 return ret.ToString();62 }
效果图:
简易文件夹无限级,使用递归重构层级列表
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。