索引器与迭代器

  前一阵子在改一个项目bug,里边有这样一个功能。具体是这个样子:

  功能里有一个由名字(string)组成的array[]数组,现在因为客户那里的人员调动我要把名字为“张三”的人去掉。

  第一时间想到的是直接接着对数组进行操作,因为数组的长度不能改变,就零件了一个数组array2[array[].length-1]来保存出去张三后的array[]的数据。

  公司的老人路过的时候问我为什么不直接用List进行操作,于是有了下面的转换代码:

 User[] tempList = new User[designationLeaderList.size()];
    List<User> list1= new ArrayList<User>();
    for(User u: tempList){
    list1.add(u);
}

  经过转换以后形成一个arrayList,可以直接remove掉含有张三名字的数据项,不用重现创建数组那样麻烦:

1 for(int i=0;i<list1.size();i++){
2     if(list1.get(i).equal("aa")){
3     list1.remove(i);
4     i--;
5     }
6 }

remove张三

  此处因为list在执行remove之后,第i+1个元素成为了第i个元素,所以在remove完成之后,需要执行一次i--以保证每个数据都被校验过。

————————————————————————————————我是分割线—————————————————————————————————————

  公司的带我的老大看到上边的代码以后让我查一下迭代器和索引器是什么,然后在讨论这段功能的代码。

  大体看了一下,java关于迭代器Iterator功能比较简单,并且只能单向移动:

  (1) 使用方法iterator()要求容器返回一个Iterator。第一次调用Iterator的next()方法时,它返回序列的第一个元素。注意:iterator()方法是java.lang.Iterable接口,被Collection继承。

  (2) 使用next()获得序列中的下一个元素。

  (3) 使用hasNext()检查序列中是否还有元素。

  (4) 使用remove()将迭代器新返回的元素删除。

  Iterator是Java迭代器最简单的实现,为List设计的ListIterator具有更多的功能,它可以从两个方向遍历List,也可以从List中插入和删除元素。

  具体的实现代码如下: 

1  list l = new ArrayList();
2    l.add("aa");
3    l.add("bb");
4    l.add("cc");
5    for (Iterator iter = l.iterator(); iter.hasNext();) {
6       String str = (String)iter.next();
7       System.out.println(str);
8    }

Iterator实现

  而索引器并不是java里的东西,在c#中找到了相应的功能:

  索引器即以类似于数组一样的用下标来访问类的数据信息的方法。有别于类似于属性用字段来访问数据信息。

  具体实现代码如下:

//Student类  

public Class Student

      {        //构造函数 

            public Student(){}  

            public Student(string name,int age,string hobby)   

                  {       

                        this.name = name;     

                        this.age = age;    

                        this.hobby = hobby;    

                   }    

                  //三个属性 (姓名)Name,(年龄)Age,(爱好)Hobby     

                   private string name;    

                   public String Name      

                          {       

                                 get{return name;}           

                                 set{name = value;}  

                          }     

                     private int age;      

                     public int Age       

                         {           

                                   get{return age;}           

                                   set{age = value;}       

                          }         

                     private string hobby;    

                     public string Hobby    

                          {        

                                   get{return hobby;}            

                                   set{hobby = value;}       

                           }     

                //方法     

              public void SayHi()    

                {  Console.WriteLine("大家好,我是{0},今年{1}岁,喜欢 {2}",Name,Age.ToString(),Hobby);    } 

         }  

//Students类 

  Public Class Students 

          {    //加载时初始化stu数组    

            public Students()     

                 {  stu[0] = new Student("rose",21,"dancing");  

                     stu[1] = new Student("jack",22,"reading");       

                     stu[2] = new Student("mimi",21,"singing");   }   

                //Student类类型数组属性    

                  private Student [] stu = new Student[3];     

                   //整数索引器    

                   public Student this[int index]       

                     {

                             get{return stu[index];} 

                     }    

                    //字符串索引器    

                  public Student this[string name]    

                            {           

                               get  {  int i ;  bool found = false;  for(i = 0;i < stu.length;i ++)               

                                    { if(stu[i].Name == name)                  

                                         { found = true;  break; } }     

                                      if(found)  { return stu[i]; }                

                                        else  {return null; }  

                                  }     

                             } 

             } 

Public Class Program 

  {      //Main函数中      

           static void Main()   

                      {Students stu = new Students(); 

                        stu[0].SayHi();        //通过索引查找          

                         stu["rose"].SayHi();   //通过姓名查找  

                         Console.ReadKey();  } 

   }

索引器实现

  

时间: 2024-10-09 20:53:37

索引器与迭代器的相关文章

接口、索引器、Foreach的本质(学习笔记)

接口 什么是接口? 接口代表一种能力,和抽象类类似但比抽象类的抽象程度更高! 接口的定义: 1 public interface IEat//定义一个接口 2 { 3 void Eat(string food);//为该接口定义一种能力 4 } 接口的定义 从上边的例子中我们可以看到,接口中的方法是没有方法体的甚至连访问修饰符都没有.而且在接口中只能有方法.属性.索引器及事件! 接口的使用: 1 public class Dog:IEat //Dog类实现IEat接口 2 { 3 //Dog类实

Python之装饰器、迭代器和生成器

在学习python的时候,三大“名器”对没有其他语言编程经验的人来说,应该算是一个小难点,本次博客就博主自己对装饰器.迭代器和生成器理解进行解释. 为什么要使用装饰器 什么是装饰器?“装饰”从字面意思来谁就是对特定的建筑物内按照一定的思路和风格进行美化的一种行为,所谓“器”就是工具,对于python来说装饰器就是能够在不修改原始的代码情况下给其添加新的功能,比如一款软件上线之后,我们需要在不修改源代码和不修改被调用的方式的情况下还能为期添加新的功能,在python种就可以用装饰器来实现,同样在写

Python学习之三大名器-装饰器、迭代器、生成器

Python学习之三大名器-装饰器.迭代器.生成器 一.装饰器     装饰,顾名思义就是在原来的基础上进行美化及完善,器这里指函数,所以说装饰器就是装饰函数,也就是在不改变原来函数的代码及调用方式的前提下对原函数进行功能上的完善.其核心原理其实是利用闭包.     格式 @关键字+装饰函数          被装饰函数()      注意:@行必须顶头写而且是在被装饰函数的正上方     按照形式可以分为:无参装饰器和有参装饰器,有参装饰器即给装饰器加上参数     以下示例是一个无参装饰器,

Python(四)装饰器、迭代器&生成器、re正则表达式、字符串格式化

本章内容: 装饰器 迭代器 & 生成器 re 正则表达式 字符串格式化 装饰器 装饰器是一个很著名的设计模式,经常被用于有切面需求的场景,较为经典的有插入日志.性能测试.事务处理等.装饰器是解决这类问题的绝佳设计,有了装饰器,我们就可以抽离出大量函数中与函数功能本身无关的雷同代码并继续重用.概括的讲,装饰器的作用就是为已经存在的对象添加额外的功能. 先定义一个基本的装饰器: ########## 基本装饰器 ########## def orter(func):    #定义装饰器     de

Python装饰器、迭代器、生成器、re正则表达式、字符串格式

本章内容: 装饰器 迭代器 & 生成器 re 正则表达式 字符串格式化 装饰器 装饰器是一个很著名的设计模式,经常被用于有切面需求的场景,较为经典的有插入日志.性能测试.事务处理等.装饰器是解决这类问题的绝佳设计,有了装饰器,我们就可以抽离出大量函数中与函数功能本身无关的雷同代码并继续重用.概括的讲,装饰器的作用就是为已经存在的对象添加额外的功能. 先定义一个基本的装饰器: ########## 基本装饰器 ########## def orter(func): #定义装饰器 def inner

Python装饰器、迭代器&amp;生成器、re正则表达式、字符串格式化

Python装饰器.迭代器&生成器.re正则表达式.字符串格式化 本章内容: 装饰器 迭代器 & 生成器 re 正则表达式 字符串格式化 装饰器 装饰器是一个很著名的设计模式,经常被用于有切面需求的场景,较为经典的有插入日志.性能测试.事务处理等.装饰器是解决这类问题的绝佳设计,有了装饰器,我们就可以抽离出大量函数中与函数功能本身无关的雷同代码并继续重用.概括的讲,装饰器的作用就是为已经存在的对象添加额外的功能. 先定义一个基本的装饰器: ########## 基本装饰器 ########

4)装饰器、迭代器、生成器以及内置函数

 装饰器.迭代器.生成器以及内置函数 装饰器: 原函数前后增加功能,切不改变函数的原本使用方式 import timedef wrapper(f):    def inner():        start = time.time()        f()        end = time.time()        print('执行效率为%s'%(end-start))    return inner @wrapperdef func():    print('this is func')

枚举器和迭代器

一.枚举器和可枚举类型 1.0   一个简单的例子 1 static void Main(string[] args) 2 { 3 int[] arr = { 2,3,5,8}; 4 foreach (int item in arr) 5 { 6 Console.WriteLine("item's Value is :{0}",item); 7 } 8 Console.ReadKey(); 9 } 上边例子通过foreach依次取出数组中的元素并打印,为什么数组能够实现这种操作呢?原因

Python概念之装饰器、迭代器、生成器

装饰器.迭代器.生成器均属于函数知识范畴 1.装饰器 理解装饰器,首先要了解闭包函数. 闭包函数:1.定义在函数内部的函数: 2.该函数的函数体代码包含对外部作用域(而不是全局作用域)名字的引用: 3.通常将闭包函数用return返回,然后可以任意调用. eg:以下代码中inner()即闭包函数 def outer(): x=1 def inner(): print(x) return innerf=outer() 装饰器:即是一种闭包函数的应用. 什么是装饰器?:装饰它人的器具,本身可以是任意