VR引擎程序设计基础1026night

88 阅读4分钟

1.拿到京东的页而html数据,把里面的一级菜单给抓取出来,然后将每一个级菜单的数据存到数组中最后将数组转成json字符串放到json. txt文件中一个数组中放着很多对象,一个对象里面就有一个字段firstMenue-个数组

using LitJson;
using System.Net;
using System.Text;
using System.Text.RegularExpressions;

namespace ConsoleApp1025
{
    public class Menu
    {
        //使用一个静态方法帮我们创建对象  
        public Menu()
        {
            this.firstMenu = FirstMenu;
        }
        public List<string> firstMenu;
        private static List<string> FirstMenu;
        public static Menu getMenu(List<string> MenuList)
        {
            FirstMenu = MenuList;
            return new Menu();
        }
    }
    internal class Program
    {
        static void Main(string[] args)
        {
            List<Menu> MyMenu = new List<Menu>();
            //昨天讲了json,如何转成json字符串,还有怎么拿到json数据转成对应的数组或者对象,正则收官

            //1.拿到京东的页而html数据,把里面的一级菜单给抓取出来,然后将每一个级菜单的数据存到数组中
            //最后将数组转成json字符串放到json. txt文件中一个数组中放着很多对象,一个对象里面就有一个字段firstMenue-个数组
            /*WebClient wc = new WebClient();
            wc.Encoding = Encoding.UTF8;
            string file = File.ReadAllText("./1.html");
            MatchCollection matches = Regex.Matches(file, "<a.*>(.*)</a>");
            foreach(Match i in matches)
            {
                Console.WriteLine(i.Groups[1].Value);
            }
            Console.ReadKey();*/

            //应为换行影响我们去提取 不如利用换行去帮助我们
            //干脆把</li>后面加上换行,每次去匹配的内容是没有换行符的 
            //利用这个特点 我想匹配谁就给谁加换行符
            //先拿到数据
            string files = File.ReadAllText("./1.html");
            //先去掉所有的换行符,给</li>后面加一个\n
            files = files.Replace("\n", "");
            string pattern1 = "<li\\s+class=\"cate_menu_item\".+?</li>";//+?开启贪婪模式  匹配的时候最小子串
            string pattern2 = "<a.+class=\"cate_menu_lk\".+>(.+)</a>";
            MatchCollection matches = Regex.Matches(files, pattern1);
            foreach (Match i in matches)
            {
                if (i.Success)
                {
                    List<string> MenuList = new List<string>();
                    //匹配每一组a中的数据
                    string file = Convert.ToString(i).Replace("</a>", "</a>\n");
                    MatchCollection menuMatches = Regex.Matches(file, pattern2);
                    foreach(Match j in menuMatches)
                    {
                        MenuList.Add(j.Groups[1].ToString());
                    }
                    //将列表赋值给对象的一个字段,将对象放到列表中
                    MyMenu.Add(Menu.getMenu(MenuList));
                }
            }
            //转json格式
            string json = JsonMapper.ToJson(MyMenu);
            File.WriteAllText("./1.TXT", json);

        }

    }   
    
}

image.png

image.png

哈希表

using System.Collections;
namespace 哈希表
{
    internal class Program
    {
        static void Main(string[] args)
        {
            //哈希表  哈希表里的键名是唯一的
            Hashtable table = new Hashtable();
            table.Add("name", "林宇隆");//不可以添加相同的的键名 
            table.Add("id",123);
            table["name"] = 3;
            Console.WriteLine(table["name"]);
            //遍历哈希表
            foreach(DictionaryEntry i in table)
            {
                Console.WriteLine(i.Key);
                Console.WriteLine(i.Value);
            }
            //遍历键
            foreach(var i in table.Keys)
            {
                Console.WriteLine(i);
            }
            //遍历值
            foreach(var i in table.Values)
            {
                Console.WriteLine(i);
            }
            table.Remove("name");
            Console.WriteLine(table.Contains("name"));
            Console.WriteLine(table.ContainsKey("name"));
            Console.WriteLine(table.ContainsValue("林宇隆"));
        }
    }
}

image.png

链表

namespace 链表1026night
{
    //创建一个简单的链表类
    public class LinkList<T>
    {
        
        public LinkNode<T> head;//头结点
        public LinkNode<T> last;//尾节点
        //添加的方法
        public void Add(T value)
        {
            LinkNode<T> node = new LinkNode<T>();//新建一个节点
            node.value = value;//给新建节点value赋值
            //链表有可能是空的
            if (head == null)
            {
                head = node;
                last = node;
            }
            else//插入到尾节点的后面
            {
                last.nextNode = node;
                last = node;
            }
        }
        //查询的方法 输入一个值,帮我查询返回该节点
        public LinkNode<T> Find(T value)//head.value.Equals(value)判断是不是对象中value字段的值
        {
            LinkNode<T> node = head;//从头节点开始遍历
            while (node != null)//直到节点为空也就是尾节点的下一个是空这时候就跳出循环
            {
                if (node.value.Equals(value))//判断节点中的字段value的值是不是我传进来的值  如果是就返回该节点
                {
                    return node;
                }
                node = node.nextNode;//移到下一个节点进行下一轮的判断
            }
            return null;//如果没有找到就返回空
        }
        //remove方法
        public void Remove(T value)//移除某个值的节点  先找到节点  
        {
            //没有节点
            LinkNode<T> node = head;//从头节点开始遍历
            while (node != null)//直到节点为空也就是尾节点的下一个是空这时候就跳出循环
            {
                //只有一个节点 head=null last=null  
                if (node.nextNode == null)
                {
                    head = null;
                    last = null;
                    return;
                }
                else
                {
                    if (head.value.Equals(value))
                    {
                        head = head.nextNode;
                    }
                }
                
                if (node.nextNode.value.Equals(value))//判断节点中的字段value的值是不是我传进来的值  如果是就返回该节点
                {
                    //查到了节点 要移除节点  假设只有一个节点 head=null last=null 多个节点情况移除头节点  移除头结点  移除中间的节点   移除最后的节点
                    
                     //多个节点的情况移除头节点  只需要head=head.nextNode
                        if (last.value.Equals(value))
                        {
                            node.nextNode = null;
                            last=node;
                        }else
                        {
                            node.nextNode = node.nextNode.nextNode;
                        }
                        //移除中间节点  该节点的前一个节点指向下下个节点

                        //移除最后节点  last等于前一个节点  前一个节点的lastNode等于空
                    
                    return;
                   
                } 
                node = node.nextNode;//移到下一个节点进行下一轮的判断
            }
            return;//没有改节点
           


        }
    }
    
    //链表节点类
    public class LinkNode<T>
    {
        public T value;
        public LinkNode<T> nextNode;
        public LinkNode<T> previous;
    }
    internal class Program
    {
        static void Main(string[] args)
        {
            //new一个 linklist
            LinkList<string> list = new LinkList<string>();
            list.Add("fdjlkfld");
            Console.WriteLine(list.Find("fdjlkfld").value);
            list.Remove("fdjlkfld");
            Console.WriteLine(list.Find("fdjlkfld")==null);
           
           
             
          
        }
    }
}

image.png