一、概述:
軟體開發過程中不可避免會用到集合,c#中的集合表現在陣列和若干集合類。不管是陣列還是集合類都有若干優點。這樣如何使用集合是我們開發過程中不可或缺的技巧。
二、c#中集合介紹:
在上圖中可以看見c#集合分類:
集合分為線性和非線性(很少用),這裡我們終點介紹線性集合。
1. 如果集合的數目固定並且不涉及轉型,使用陣列效率高,否則就是用list。
2. 棧滿足先進後出原則,佇列滿足先進先出。
3. 資料字典:儲存的是鍵值對,值基於鍵的雜湊碼的基礎進行儲存。字典物件包含集合元素儲存桶組成,每乙個儲存桶與基於該元素的鍵的雜湊值關聯。
4. 雙向鍊錶:當我們覺得集合中插入和刪除資料速度慢的時候就可以考慮雙向鍊錶。
三、c#中集合使用:
1.元素數量可變的情況下不應該使用陣列:存在裝箱和開闢空間
2. 多數情況使用foreach進行迴圈遍歷:
1)foreach提供了簡單的迭代器語法。
2)自動將**置入try-finally塊。
3)若型別實現了dispose介面,它迴圈結束後自動呼叫dispose方法。
3. froeach不能代替for:froeach只支援迭代不支援對集合進行增刪操作。
4. 盡量使用泛型集合代替非泛型集合:可以記錄避免裝箱和拆箱操作。
5. 確保集合執行緒安全:建議使用執行緒鎖
static listlist = new list()6.查詢list使用lambda表示式並使用匿名型別儲存linq查詢結果:,new person(),
new person(),
new person()
};static autoresetevent autoset = new autoresetevent(false
);
static
object sycobj = new
object
();
static
void main(string
args)
}});
t1.start();
thread t2 = new thread(() =>
});t2.start();
console.readkey();
}class
person
public
int age
}
public7.理解延遲求值和主動求值之間的區別:class
linqtolist
public
void
setpeoplelist()
);peoplelist.add(
new people() );
peoplelist.add(
new people() );
peoplelist.add(
new people() );
peoplelist.add(
new people() );
peoplelist.add(
new people() );
peoplelist.add(
new people() );
peoplelist.add(
new people() );
}public listgetpeoplelist()
return
list;}}
list list = new list() ;輸出:lazy:10;6;7;8;9;var lazy = list.where(l => l > 5
);
var eager = list.where(l => l > 5).tolist();
list[
0] = 10
; console.writeline(
"lazy:");
foreach (var item in
lazy)
;", item);
}console.writeline(
"eager:");
foreach (var item in
eager)
;", item);
}console.readkey();
eager:6;7;8;9;
對查詢呼叫tolist,toarray等方法,將會使其立即執行查詢,不會等在迭代的時候執行查詢。
8. 區別linq查詢中的ienumerable和iqueryable
linq查詢方法一共提供了兩類擴充套件方法,在system.linq命名空間下有兩個靜態類:
enumerable類它針對繼承了ienumerable介面的集合類進行擴充套件;用於本地資料來源查詢。
queryable類它針對繼承了iqueryable介面的集合類進行擴充套件;用於遠端資料來源查詢。
9.使用linq取代集合中的比較器和迭代器:想想sql就能理解,他們不需要這些。
10.在linq查詢中避免不必要的迭代:
例如:返回年齡等於20的乙個元素即可:
方法一:from c in list where c.age==20 select c
方法二:(from c in list where c.age==20 select c).first()
C 基礎 Linq提供程式
1 linq to xml 命名空間system.xml.linq 2 linq to objects 3 linq to entities linq to objects的where和linq to entities的where這個兩個類都在system.linq命名空間的system.core程...
C 基礎 Linq學習理解
一遍學習基礎,一遍練習打字,很多樂趣。using system using system.collections.generic using system.linq using system.text using system.reflection namespace dazilianxi publ...
Linq 和 list集合 去除重複項
方法一 iqueryablelistnotice from news in base.cabindata.newscontents where news.flag 1 select news distinct 此種去除方法弊端 只要物件中有重複的字段都會去除,會比對物件中所有的字段。方法二 把lin...