static List <List <config> > build_group(table table) { List <List <SkillGroupNode> > lists = new List <List <SkillGroupNode> >(); for (int i = 0; i < table.configs.Count; i++) { string _Nextid = get_nextid(table.configs[i]); if (_Nextid != null) { SkillGroupNode node = new SkillGroupNode { nextid = _Nextid, config = table.configs[i] }; insert_node(ref lists, node); } } List <List <config> > group = new List <List <config> >(); for (int i = 0; i < lists.Count; i++) { group.Add(new List <config>()); for (int j = 0; j < lists[i].Count; j++) { group[i].Add(lists[i][j].config); } } return(group); }
static void insert_node(ref List <List <SkillGroupNode> > lists, SkillGroupNode node) { for (int i = 0; i < lists.Count; i++) { SkillGroupNode head = lists[i][0]; SkillGroupNode last = lists[i][lists[i].Count - 1]; if (head.config.key == node.nextid) { lists[i].Insert(0, node); insert_node(ref lists, lists[i]); return; } else if (last.nextid == node.config.key) { lists[i].Add(node); insert_node(ref lists, lists[i]); return; } } lists.Add(new List <SkillGroupNode> { node }); }
static void insert_node(ref List <List <SkillGroupNode> > lists, List <SkillGroupNode> nodes) { //防止链表循环 //如果循环,则配置出现严重失误,配置了一个技能升级闭环 Debug.Assert(nodes.Last().nextid != nodes[0].config.key); for (int i = 0; i < lists.Count; i++) { SkillGroupNode head = lists[i][0]; SkillGroupNode last = lists[i][lists[i].Count - 1]; if (head.config.key == nodes.Last().nextid) { lists[i].InsertRange(0, nodes); lists.Remove(nodes); insert_node(ref lists, lists[i]); } else if (last.nextid == nodes[0].config.key) { lists[i].AddRange(nodes); lists.Remove(nodes); insert_node(ref lists, lists[i]); } } }