zoukankan      html  css  js  c++  java
  • 几种常见语言的基本语法对比:集合

    public E next(),java 的迭代器的方法 直接是返回元素,和oc的基本一样。oc也是返回对象,而且方法名都直接指出了 obj=[it nextObject],依稀记得c++的迭代器是一个类,提供了 ++的 方法。而其他语言是直接next object。隐藏了移动迭代器的动作。

    c++:

    对比了几个语言,真不想写,也写不来c++,单独之后补上吧。 c++,学之者生,用之者死。

    oc:集合,单单使用是非常简单的,反正也不需要 我们去实现hash或树来设计一个集合容器。

    1.oc的容器固定了,必须装指针,或扁平数据,  也好。不像c++,还可以装对象本身。

    2.for in .这个和其他语言的 for each 一样,其实就是某些实现了迭代或某种链表的数据结构 ,所提供的一个遍历的语法糖。因为不提供索引。如set,是无顺序的,没理由索引,随便插入一个,位置无序变化。所以只提供next功能。一面误解吧。

    //
    //  arraystudy.m
    //  HIWorld
    //
    //  Created by linson on 2018/9/5.
    //  Copyright © 2018年 linson. All rights reserved.
    //
    
    #import "arraystudy.h"
    
    @implementation arraystudy
    
    //可以很清楚的看出和c++ 的不同。 oc的集合。里面的元素就就是对象指针。不会去放一个对象, NSMutableArray<NSString> *mybooks=nil; 这样是编译不过的。
    //oc 的静态函数,写一个+符号就可以。。。莫名喜感。
    //一句话,对比c++ , oc是个好用的语言。
    
    +(void)Showme
    {
        //[self fixarray];
        //[self changenableArray];
        [self studySet2];
        
        //[self studySet];
    }
    
    +(void)studySet2
    {
        NSMutableSet<NSString*> * books=[NSMutableSet new];
        
        //insert
        [books addObject:@"c++"];
        [books addObject:@"c#"];
        [books addObject:@"java"];
        [books addObject:@"banana"];
        
        //delete
        //看到这里就想起c++ 的erase. c++ 的删除,大部分使用删除某个迭代器,那么在 循环中,删除,就要考虑删除的是否是最后一个。为什么不加一个方法呢?
        [books removeObject:@"banana"];
        
        
        for(NSString *mybook in books)
        {
            NSLog(@"%@",mybook);
        }
    }
    
    
    +(void)studySet
    {
        NSArray *books1=@[@"c++",@"java",@"c++",@"c#"];
        
        NSSet<NSString*> *books=[[NSSet alloc]initWithArray:books1];//这里为什么不可以简便初始化呢?也好吧。
        
        //traverse
        NSArray<NSString*>  *arraybooks= [books allObjects];
        for(int i=0;i<[arraybooks count];i++)
        {
            NSLog(@"name:%@",arraybooks[i]);
        }
    
        //enum traverse
        NSEnumerator *it=[books objectEnumerator];
        NSString *obj=nil;
        while ((obj=[it nextObject])!=nil)
        {
            NSLog(@"%@",obj);
        }
        
        //for in.其实就是enum 上面方法的一个语法糖。实现了enum接口色任意集合。那么用一个语法糖来 隐藏 NSEnumerator 实现 travese.
        for(NSString *book in books)
        {
            NSLog(@"traverse book: %@",book);
        }
    }
    
    
    +(void)changenableArray
    {
        //add
        NSMutableArray<NSString *> *books=[NSMutableArray<NSString *> new];
        [books addObject:@"c++"];
        [books addObject:@"java"];
        [books addObject:@"oc"];
        [books addObject:@"orange"];
        
        for(int i=0;i<[books count];i++)
        {
            NSLog(@"book name:%@",books[i]);
        }
        //modify
        books[2]=@"objective c";
        
        //delete
        [books removeObjectAtIndex:3];
        
        for(int i=0;i<[books count];i++)
        {
            NSLog(@"2book name:%@",books[i]);
        }
    }
    
    +(void)fixarray
    {
        NSArray<NSString *> *books=@[@"c++",@"java"];//语法有点怪的。@”表示这个数组类型是属于Objective-C类型的。里面的”@”表示字符串属于Oc 的string. 否则就是c,c++的。而且是方括号,不是大括号。
        
        for(int i=0;i<[books count];i++)
        {
            NSLog(@"name:%@",books[i]);
        }
    }
    
    @end

    c#

    随便写下,最常用的2个。高级语言已经做的非常方便了。

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    
    namespace helloworld
    {
        public abstract class arraystudy
        {
            public static void  ShowMe()
            {
                list();
                dictionary();
            }
    
    
            public static void list()
            {
                List<string> books = new List<string>();
                books.Add("c++");
                books.Add("c#");
                books.Add("java");
    
                foreach(string bookname in books)
                {
                    Console.WriteLine(bookname);
                }
            }
    
            public static void dictionary()
            {
                Dictionary<int, string> books2 = new Dictionary<int, string>();
                //insert
                books2.Add(9, "c++");
                books2.Add(6, "java");
                books2.Add(11, "tea");
    
                books2.Remove(11);
    
                //get
                Console.WriteLine(books2[6]);
    
                //reversa
                foreach (KeyValuePair<int, string> pair in books2)
                {
                    Console.WriteLine(pair.Value);
                }
            }
        }
    }

    java

    和c#基本意思。基本一样。

    //主要掌握主要的集合.和如何遍历他们.基本数组, 可变集合,不重复集合,字典类型    java 是list  set  map.
        public static void Study_Array()
        {
            String[] books={"c#","c++","c","java","oc"};
            for(int i=0;i<books.length;i++)
            {
                System.out.println(books[i]);
            }
            
            //list arraylist .linkedlist
            List<String> booksList=new LinkedList<String>(); //new ArrayList<String>();
            booksList.add("c#");
            booksList.add("c#234");
            booksList.add("c");
            for(int i=0;i<booksList.size();i++)
            {
                System.out.println(booksList.get(i));
            }
            System.out.println("array remove ..............");
            booksList.remove(1);
            for(int i=0;i<booksList.size();i++)
            {
                System.out.println(booksList.get(i));
            }
            
            
            //set treeset hashset.
            Set<String> bookset=new TreeSet<String>();
            bookset.add("c#");
            bookset.add("java");
            bookset.add("c");
            
            
            System.out.println("set ..............");
            //猜测看出,迭代项,第一项是指向第一个元素之前的.而不是c++默认的 beginit;
            Iterator<String> it=bookset.iterator();
            while(it.hasNext())
            {
                System.out.println(it.next());
            }
            
            //恩,熟视无睹,之前看到可枚举,可碟带类型,也没有太在意.一般都是for循环. 其实可碟带的话,就说明,系统可以基于iterator提供一个for each的语法糖给你.
            //而利用普通的for.还 必须先获得某个key的组合,在怎么转换过来 .其实直接用for each吧.用迭代还不如for each .
            System.out.println("set222 ..............");
            for (String mystr : bookset) 
            {
                System.out.println(mystr);
            }
    
            //map 
            System.out.println("map ..............");
            java.util.Map<Integer, String> mymap = new HashMap<Integer, String>(); 
        
            mymap.put(1, "c++");
            mymap.put(2, "c");
            mymap.put(3, "java");
            
            //不推荐使用.毕竟查来查去.才得到结果.
            for(Integer mykey: mymap.keySet())
            {
                System.out.println(mykey);
                System.out.println(mymap.get(mykey));
            }
            
            System.out.println("map loop..............");
            //碟带起,效率高.
            for(Entry<Integer, String> it2 :mymap.entrySet())
            {
                System.out.println(it2.getKey()+":"+it2.getValue());
            }
            
        }
  • 相关阅读:
    React元素渲染
    初识JSX
    微信小程序复制文本到剪切板
    微信小程序报错request:fail url not in domain list
    小程序,通过自定义编译条件,模拟推荐人功能
    积分抵扣逻辑
    微信小程序 switch 样式
    tomcat 配置开启 APR 模式
    tomcat8 传输json 报错 Invalid character found in the request target. The valid characters are defined in RFC 3986
    c++数组初始化误区
  • 原文地址:https://www.cnblogs.com/lsfv/p/9593505.html
Copyright © 2011-2022 走看看