几种常见语言的基本语法对比:集合

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());
        }
        
    }

 

posted @ 2018-09-05 17:40  琴鸟  阅读(550)  评论(0编辑  收藏  举报