递归和循环---从EasyUI Tree 发现自己的硬伤
前一阵子,朋友托我帮忙用vb.net写一个数独游戏,我当时的第一个想法---万能的互联网肯定有资源,肯定有人写---当然这是必须的---我站在巨人的肩膀上帮朋友完成代码---但是我突然觉得自己站在巨人这么高的肩膀上太高耸,想要找一下脚踏实地的感觉,所以我想自己写写,看看能不能写出来,结果就是------我压根没有思路。
对,毫不夸张,无从下手。
更深刻的一件事就是项目中用的的树状结构(easyui tree 实现),同样是根据数据库动态生成,我站在巨人的肩膀上,看着网上类似的datatable转json拼接,很简单很简单的只是用到了一个循环,一个递归,可是把代码真正应用于我们的系统,我整整用了一天的时间,整整一天只写了一个循环,一个递归。
写出来的那一刻要多美好有多美好,更重要的是我写完一个接下来一口气又写了三个,更更重要的是我发现自己循环和递归还有数学逻辑编程这方面是硬伤啊,然后接下来最最重要的一条:都是自己吓唬自己罢了,这才是硬伤。
天天骗自己循环递归,算法自己不会写,写不好所以每次遇到循环递归算法都想着绕开走,想着让别人写吧,我是真的不会啊种种,哎呀呀白接受米总的教育了。。到现在还这样自己骗自己。
真的没什么难的,所谓的难不过是自己告诉自己难,不过是自己给自己设立的围墙。
最后献上datatable转easyui treejson 的代码,大家不要见笑,就是这么简单。
ps:代码注释不是没有而是给去掉了,没有挑战简直没意思
public static string DatatableToJsonUserRoleTree(DataTable dt, string pid, string pvalue, string id, string name, int flag) { StringBuilder sb = new StringBuilder(); DataTable chdt = GetChildren(int.Parse(pvalue)); string filter = String.Format(" {0}='{1}'", pid, pvalue); DataRow[] drs = dt.Select(filter); if (drs.Length < 1 && chdt.Rows.Count < 1) { return ""; } if (drs.Length >= 1 || chdt.Rows.Count >= 1) { sb.Append(",\"children\":["); if (chdt.Rows.Count >= 1) { foreach (DataRow chdrs in chdt.Rows) { int groupid = int.Parse(chdrs["group_id"].ToString()); sb.Append("{"); sb.AppendFormat("\"id\":\"{0}\",", chdrs["group_id"].ToString()); sb.AppendFormat("\"text\":\"{0}\"", chdrs["group_name"].ToString()); DataTable userdt = GetUserByGroup(groupid); if (userdt.Rows.Count >= 1) { sb.Append(",\"children\":["); foreach (DataRow userdrs in userdt.Rows) { sb.Append("{"); sb.AppendFormat("\"user_id\":\"{0}\",", userdrs["user_id"].ToString()); sb.AppendFormat("\"text\":\"{0}\"", userdrs["user_name"].ToString()); sb.Append("},"); } if (sb.ToString().EndsWith(",")) { sb.Remove(sb.Length - 1, 1); } sb.Append("]"); } sb.Append("},"); } } if (drs.Length >= 1) { foreach (DataRow dr in drs) { string spid = dr[id].ToString(); sb.Append("{"); sb.AppendFormat("\"id\":\"{0}\",", dr[id].ToString()); sb.AppendFormat("\"text\":\"{0}\"", dr[name].ToString()); sb.Append(DatatableToJsonUserRoleTree(dt, pid, spid, id, name, 0).TrimEnd(',')); sb.Append("},"); } } } if (sb.ToString().EndsWith(",")) { sb.Remove(sb.Length - 1, 1); } sb.Append("]"); return sb.ToString(); }
上士闻道,勤能行之。中士闻道,若存若亡。下士闻道,大笑之。---------共勉