C#学习笔记(集合)

1 System.Array类和System.collections.ArrayList类

示例:控制台程序,新疆三个类,抽象类Animal以及两个继承类Cows和Chicken

Animal.cs

public abstract class Animal
{
  protected string name;

  public string Name
  {
    get { return name; }
    set { name = value; }
  }
  public Animal()
  {
    name = "The animal with no name";
  }
  public Animal(string newName)
  {
    name = newName;
  }
  public void Feed()
  {
    Console.WriteLine("{0} has been fed.", name);
  }
}

Cows.cs

public class Cow : Animal
{
  public void Milk()
  {
    Console.WriteLine("{0} has been fed.",name);
  }
  public Cow(string newName)
  : base(newName)
  {

  }
}

Chicken.cs

public class Chicken : Animal
{
  public void LayEgg()
  {
    Console.WriteLine("{0} has been fed.", name);
  }
  public Chicken(string newName)
  : base(newName)
  {

  }
}

Program.cs

class Program
{
  static void Main(string[] args)
  {
    Console.WriteLine("Create an Array type collection of Animal " + "object and use it");
    Animal[] animalArray = new Animal[2];
    Cow myCow1 = new Cow("Deirdre");
    animalArray[0] = myCow1;
    animalArray[1] = new Chicken("Ken");

    foreach (Animal myAnimal in animalArray)
    {
      Console.WriteLine("New {0} object added to Array collection," + "Name = {1}", myAnimal.ToString(), myAnimal.Name);
    }

    Console.WriteLine("Array collection contatains {0} objects.",animalArray.Length);

    animalArray[0].Feed();
    ((Chicken)animalArray[1]).LayEgg();
    Console.WriteLine();

    Console.WriteLine("Create an ArrayList type collection of Animal " + "object and use it");
    ArrayList animalArrayList = new ArrayList();
    Cow myCow2 = new Cow("Hayley");
    animalArrayList.Add(myCow2);
    animalArrayList.Add(new Chicken("Roy"));
    foreach(Animal myAnimal in animalArrayList)
    {
      Console.WriteLine("New {0} object added to ArrayList collection," + "Name = {1}",myAnimal.ToString(),myAnimal.Name);
    }
    Console.WriteLine("ArrayList collection contains {0} objects.",animalArrayList.Count);
    ((Animal)animalArrayList[0]).Feed();
    ((Chicken)animalArrayList[1]).Feed();
    Console.WriteLine();

    Console.WriteLine("Additional manipulaion of ArrayList:");
    animalArrayList.RemoveAt(0);
    ((Animal)animalArrayList[0]).Feed();
    animalArrayList.AddRange(animalArray);
    ((Chicken)animalArrayList[2]).LayEgg();
    Console.WriteLine("The animal called {0} is at index {1}.",myCow1.Name,animalArrayList.IndexOf(myCow1));
    myCow1.Name = "Janice";
    Console.WriteLine("The animal is called {0}.",((Animal)animalArrayList[1]).Name);
    Console.ReadKey();
  }
}

输出结果:

  这个示例创建了两个对象集合,第一个使用System.Array类(这是一个简单的数组),第二个集合使用了System.collections.ArrayList类。

  对于简单的数组来说,只有用固定的大小初始化后,才能使用它。

  Animal[] animlaArray = new Animal[2];

  而ArrayList集合不需要初始化其大小,所以可以使用一下代码创建列表animalArrayList;

  ArrayList[] myArrayList = new ArrayList();

  因为数组是引用类型,因此用一个长度初始化数组并没有初始化他所包含的项。要使用一个指定的项,该项还需要初始化,即需要给这个项赋予初始化了的对象:

  Cow myCow1 = new Cow("Deirdre");

  animalArray[0] = myCow1;

  animalArray[1] = new Chicken("Ken");

  对于ArrayList集合,他没有现成的项。他没有null引用的项。这样就不能以相同的方式给索引赋予新实例。我们是用ArrayList对象的add()方法加新项:

  Cow myCow2 = new Cow("hayley");

  animalArrayList.Add(myCow2);

  animalArrayList.Add(new Chicken("Roy"));

注意:

  数组的类型是抽象类型Animal,因此不能直接调用由派生类提供的方法,而必须使用数据类型转换:

  ((Chicken)animalArray[1]).LayEgg();

2 定义集合,创建自己的、强化类型的集合

2.1 System.Collections.CollectionBase类

实例:

在上面的基础之上添加一个新类Animals.cs

Animals.cs

public class Animals : CollectionBase
{
  public void Add(Animal newAnimal)
  {
    List.Add(newAnimal);
  }
  public void Remove(Animal newAnimal)
  {
  List.Remove(newAnimal);
  }
  public Animals()
  {
    Console.WriteLine("This is Animals!!!");
  }
  public Animal this[int animalIndex]
  {
    get
    {
      return (Animal)List[animalIndex];
    }
    set
    {
      List[animalIndex] = value;
    }
  }
}

Program.cs

class Program
{
  static void Main(string[] args)
  {
    Animals animalCollection = new Animals();
    animalCollection.Add(new Cow("Jack"));
    animalCollection.Add(new Chicken("Vera"));
    foreach (Animal myAnimal in animalCollection)
    {
      myAnimal.Feed();
    }
    Console.ReadKey();
  }
}

输出结果:

这个实例使用了上一节详细介绍的代码,实现类Animal中强化类型的Animal对象集合。Main()中代码仅实例化了一个Animals对象animalCollection,添加了两个项,再使用foreach循环调用这个两个对象继承于基类Animal的Feed方法。

3 迭代器

  迭代器的定义是,他是一个代码块,按顺序提供了要在foreach循环中使用的所有值。一般情况下,这个代码块是一个方法,但也可以使用访问器和其他代码块作为迭代器。这里为了简单起见,介绍方法:

public static IEnumerable SimpleList()

{

  yield return "string 1";

  yield return "string 2";

  yield return "string 3";

}

public static void Main(string[] args)

{

  foreach(string item in SimpleList())

  {

    Console.WriteLine(item);

  }

  Console.ReadKey;

}

  实际上,并没有返回string类型的项,而是返回了object类型的值。因为object是所有类型的基类,也就是说,可以从yield语句中返回任意类型。

时间: 2024-08-06 23:43:11

C#学习笔记(集合)的相关文章

Java学习笔记----------集合Set

Java集合-----Set集合:就像一种容器,可以把多个对象放进该容器中.Java集合分为:Set.List.Map三种体系. Set:无序的,不可重复的: List:有序的,可重复的: Map:代表有映射关系的集合,Map保存的每一项数据都是key-value对.注意:Java 5后添加了Queue体系,代表一种队列集合实现. 集合和数组对比:1.数组一旦初始化,长度不可变:2.数组无法保存具有映射关系的数据,例如成绩表:语文---79:3.数组的元素可以是基本类型的值,也可以是对象,而集合

java学习笔记 --- 集合

1.定义:集合是一种容器,专门用来存储对象 数组和集合的区别?   A:长度区别  数组的长度固定 集合长度可变 B:内容不同  数组存储的是同一种类型的元素  而集合可以存储不同类型的元素  C:元素的数据类型问题  数组可以存储基本数据类型,也可以存储引用数据类型 集合只能存储引用类型 2.集合的继承体系结构 由于需求不同,Java就提供了不同的集合类.这多个集合类的数据结构不同,但是它们都是要提供存储和遍历功能的,   我们把它们的共性不断的向上提取,最终就形成了集合的继承体系结构图.  

【转】jmeter学习笔记——集合点

JMeter也有像LR中的集合点,本篇就来介绍下JMeter的集合点如何去实现. JMeter里面的集合点通过添加定时器来完成. 注意:集合点的位置一定要在Sample之前. 集合点:简单来理解一下,虽然我们的“性能测试”理解为“多用户并发测试”,但真正的并发是不存在的,为了更真实的实现并发这感念,我们可以在需要压力的地方设置集合点,拿那个用户和密码的地方,每到输入用户名和密码登录的地方,所有的虚拟用户都相互之间等一等,然后,一起访问. 1.接着之前创建的脚本,右键点击 线程组---->定时器-

C#学习笔记 ----集合

List<T>是与数组相当的集合类.其他类型的集合:队列.栈.链表和字典. IEnumerable<T>如果将foreach语句用于集合,就需要IEnumerable接口.这个接口定义了方法GetEnumerator(),它返回一个实现了IEnumerator接口的枚举. ICollection<T>接口由泛型集合类实现.使用这个接口可以获得集合中的元素个数,把集合复制到数组中,还可以从集合中添加和删除元素. IList<T>接口用于可通过位置访问其中的元素

Python 学习笔记 - 集合和文件操作

Set 集合 Set是一个无序而且不重复的元素集合.下面看看他有哪些基本功能 创建集合 >>> s1 = {11,22} s2 = set() s3 = set([11,22,33,4]) print(s1,s2,s3) ------------------- {11, 22} set() {33, 11, 4, 22} 把列表转换成集合,注意列表中重复的元素只保留一次 >>> li = [11,22,11,22] s1 = set(li) print(s1) ----

Python学习笔记:集合(set)基本内容

1.创建集合. 集合是无序的,元素不重复的一种序列. set() 创建,集合可变. >>> s = set('abcdef') >>> s {'d', 'c', 'b', 'a', 'e', 'f'} >>> type(s) <class 'set'> frozenset() 创建是不可变的集合,存在哈希值,可以做字典的key. >>> s = frozenset('abcdef') >>> s froz

java学习笔记—集合之Map集合

p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; text-align: center; font: 12.0px Times } p.p2 { margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px "Songti SC" } p.p3 { margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Times } p.p4 { margin: 0.0px 0.0px 0.0px 0.0

python学习笔记集合(七)

集合 set(集合)是一个无需不重复的元素数据集,对比列表的区别首先是无需的,不可以使用索引进行访问,另外一个特点是不能有重复数据. 项目开发中,集合主要用于数据元素去重和测试是否存在.集合还支持一些数学上的运算,例如:union(联合).intersection(交).difference(差).symmetric difference(对称差集). 创建集合:集合使用大括号或者set函数创建,需要注意空的集合不能使用{}创建,只能使用set函数,因为{}创建的是一个空字典. >> cour

Java学习笔记--集合类型详解

http://www.cnblogs.com/xwdreamer/archive/2012/05/30/2526822.html http://blog.csdn.net/liulin_good/article/details/6213815 http://www.cnblogs.com/meng72ndsc/archive/2010/12/23/1914477.html http://www.cnblogs.com/ningvsban/archive/2013/05/06/3062535.ht

Scala学习笔记--集合类型

队列Queue val emp = scala.collection.immutable.Queue[Int](); val has1 = emp.enqueue(1) val has123=has1.enqueue(List(2,3)) println(has1) //Queue(1) println(has123) //Queue(1,2,3) val emp2 = scala.collection.mutable.Queue[Int](); emp2.enqueue(1); emp2.en