C#陣列教程之3
C#陣列教程
第一篇:C#陣列教程
IEnumerable 介面:公開列舉數,該列舉數支援在非泛型集合上進行簡單迭代。
違規廣告ection 介面擴充套件 IEnumerable;
[ComVisibleAttribute(true)]
public interface 違規廣告ection : IEnumerable
{
//增加了公共屬性:Count,IsSynchronized和SyncRoot
//增加了公共方法:CopyTo()
}
IDictionary 和 IList 則是擴充套件 違規廣告ection 的更為專用的介面。
IDictionary 實現是鍵/值對的集合,如 Hashtable 類。
[ComVisibleAttribute(true)]
public interface IDictionary : 違規廣告ection, IEnumerable
{
//公共屬性: IsFixedSize, IsReadOnly, Item, Keys, Values
//公共方法:Add, Clear, Contains, GetEnumerator,Remove
}
某些集合(如 Queue 類和 Stack 類)限制對其元素的訪問,它們直接實現 違規廣告ection 介面。
如果 IDictionary 介面和 IList 介面都不能滿足所需集合的要求,則從 違規廣告ection 介面派生新集合類以提高靈活性。
例如:
// 假設MessageSet是變數集合。
IEnumerator enumerator = MessageSet.GetEnumerator();
string nextMessage;
enumerator.MoveNext();
while ( (nextMessage = enumerator.Current) != null)
{
DoSomething(nextMessage); // We only have read access
// to NextMessage
enumerator.MoveNext();
}
融會貫通:
using System;
using System.Collections;
public class Person
{
public Person(string fName, string lName)
{
this.firstName = fName;
this.lastName = lName;
}
public string firstName;
public string lastName;
}
public class People : IEnumerable
{
private Person[] _people;
public People(Person[] pArray)
{
_people = new Person[pArray.Length];
for (int i = 0; i
{
_people[i] = pArray[i];
}
}
public IEnumerator GetEnumerator()
{
return new PeopleEnum(_people);
}
}
public class PeopleEnum : IEnumerator
{
public Person[] _people;
// Enumerators are positioned before the first element
// until the first MoveNext() call.
int position = -1;
public PeopleEnum(Person[] list)
{
_people = list;
}
public bool MoveNext()
{
position++;
return (position
}
public void Reset()
{
position = -1;
}
public object Current
{
get
{
try
{
return _people[position];
}
catch (IndexOutOfRangeException)
{
throw new InvalidOperationException();
}
}
}
}
class App
{
static void Main()
{
Person[] peopleArray = new Person[3]
{
new Person("John", "Smith"),
new Person("Jim", "Johnson"),
new Person("Sue", "Rabon"),
};
People peopleList = new People(peopleArray);
foreach (Person p in peopleList)
Console.WriteLine(p.firstName + " " + p.lastName);
}
}
III、探討部分
C# []、Array、List、ArrayList 區別
[] 是針對特定型別、固定長度的。
Array 是針對任意型別、固定長度的。
List 是針對特定型別、任意長度的。
ArrayList 是針對任意型別、任意長度的。ArrayList 是陣列的複雜版本。ArrayList 類提供在大多數 Collections 類中提供但不在 Array 類中提供的一些功能。
例如:
Array 的容量是固定的,而 ArrayList 的容量是根據需要自動擴充套件的。
如果更改了 ArrayList.Capacity 屬性的值,則自動進行記憶體重新分配和元素複製。
ArrayList 提供新增、插入或移除某一範圍元素的方法。
在 Array 中,您只能一次獲取或設定一個元素的值。
使用 Synchronized 方法可以很容易地建立 ArrayList 的同步版本。
而 Array 將一直保持它直到使用者實現同步為止。
ArrayList 提供將只讀和固定大小包裝返回到集合的方法。而 Array 不提供。
另一方面,Array 提供 ArrayList 所不具有的某些靈活性。例如:
可以設定 Array 的下限,但 ArrayList 的下限始終為零。
Array 可以具有多個維度,而 ArrayList 始終只是一維的。
特定型別(不包括 Object)的 Array 的效能比 ArrayList 好
這是因為 ArrayList 的元素屬於 Object 型別,所以在儲存或檢索值型別時通常發生裝箱和取消裝箱。
要求一個陣列的大多數情況也可以代之以使用 ArrayList。
它更易於使用,並且通常具有與 Object 型別的陣列類似的效能。
Array 位於 System 名稱空間中;ArrayList 位於 System.Collections 名稱空間中。
其他資料集合:(以後課程介紹)
1、 Stack類,Queue類
2、 SortedList類
3、 Hashtable類
4、 泛型:位於System.Collections.Generic中,可以訪問Stack, Queue, List, Dictionary, SortedDictionary等的泛型版本。
IV.思考題:
1、 撲克牌有54張,使用現有知識模擬一幅撲克牌的例項,嘗試打亂撲克的順序(類似洗牌過程)。[基礎]
2、選擇題:[基礎]
int[,,] num1 = new int[2, a, b] {
{ { 1, 2, 3 },{ 4, 5, 6 } },
{ { 7, 8, 9 },{10,11,12} }
};
int[,,] num2 = new int[2, c, d] {
{ { 1, 2, 3 },{ 4, 5, 6 }, { 7, 8, 9 },{10,11,12}},
{ {13,14,15},{16,17,18},{19,20,21},{22,23,24} }
};
(1)其中:a,b,c,d的值分別應該是:
A. 2,3,3,4 B. 2,3,4,3 C.3,2,3,4 D.3,2,4,3
(2)num1.Length, num1.GetLength(1)及num2.Length,num2.GetLength(1)的值分別是:
A. 12,2,24,4 B. 12,3,24,3 C. 6,2,12,3 D. 3,2,3,3
3、 模擬上述撲克牌的洗牌及發牌過程(以鬥地主為例)。[中高]
4、 如果有54張圖片,你可以在第2題的基礎上寫出一個完整的鬥地主遊戲嗎?[高階]
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/14601556/viewspace-557620/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- C#陣列教程之2C#陣列
- C#陣列相乘C#陣列
- C#陣列教程C#陣列
- c# 陣列排序C#陣列排序
- C#陣列引數C#陣列
- c# 陣列學習C#陣列
- 瞭解下C# 陣列(Array)C#陣列
- C#初始化陣列C#陣列
- C# 陣列的複製C#陣列
- C#中複製陣列C#陣列
- C#學習 陣列(22)C#陣列
- PHP學習3——陣列PHP陣列
- C#陣列與集合的區別C#陣列
- 【C#學習筆記】陣列使用C#筆記陣列
- C#實現控制元件陣列C#控制元件陣列
- c#二維陣列定義宣告C#陣列
- c# 方法引數_陣列引數C#陣列
- C# unsafe 快速複製陣列C#陣列
- 慕課網玩轉資料結構課程之陣列資料結構陣列
- 陣列呼叫c#讀取陣列中獲取最大最小值方法陣列C#
- C#資料結構與演算法3-C# 串和陣列C#資料結構演算法陣列
- 請教高手,解析巢狀XMl和建立多位陣列巢狀XML陣列
- C# 移除陣列中重複資料C#陣列
- C#位元組陣列與字串轉換C#陣列字串
- C#實現控制元件陣列 (轉)C#控制元件陣列
- 【C#】山脈陣列的峰頂索引C#陣列索引
- go語言教程之淺談陣列和切片的異同Go陣列
- C#陣列 多個集合和陣列的操作(合併,去重,拆分,判斷)C#陣列
- c#列舉與陣列初始化及使用小記C#陣列
- C#教程之介面用法C#
- 重學前端之(3)陣列、排序前端陣列排序
- 樹狀陣列3種基本操作陣列
- C#高效能陣列複製實驗C#陣列
- C#中陣列的三種訪問方式C#陣列
- c#之arraylist動態陣列小記(1)C#陣列
- C# string byte陣列轉換解析C#陣列
- c#簡單實現二維陣列和二維陣列列表List<>的轉置C#陣列
- c語言中實現4行3列矩陣和3行4列矩陣的運算C語言矩陣