LINQ序列詳細(xì)描述
學(xué)習(xí)LINQ時,經(jīng)常會遇到LINQ序列問題,這里將介紹LINQ序列問題的解決方法。
自從學(xué)習(xí)LINQ以來,我發(fā)現(xiàn)了很多使用LINQ來改善代碼的方式。每一個技巧都讓代碼寫起來更簡單,可讀性更強。
這里總結(jié)了這些技巧。我會介紹如何使用LINQ來:
◆初始化數(shù)組
◆在一個循環(huán)中遍歷多個數(shù)組
◆生成隨機(jī)序列
◆生成字符串
◆轉(zhuǎn)換序列或集合
◆把值轉(zhuǎn)換為長度為1的序列
◆遍歷LINQ序列的所有子集
本文介紹遍歷LINQ序列的所有子集,如果你在LINQ方面有心得也歡迎在評論中一起分享。
遍歷LINQ序列的所有子集
有的時候,遍歷數(shù)組的所有子集很有用。子集和問題、布爾可滿足性問題以及背包問題都可以通過遍歷某個序列的所有子集來簡單解決。
有了LINQ,我們可以如下聲場所有arr數(shù)組的子集:
- T[] arr = ...;
- var subsets = from m in Enumerable.Range(0, 1 << arr.Length)
select from i in Enumerable.Range(0, arr.Length) where
(m & (1 << i)) != 0 select arr[i];
注意,如果子集的個數(shù)超過了int,上面的代碼就不能工作。因此,僅當(dāng)你知道arr的長度不超過30的時候才去使用這個方式。如果arr長度超過30,你應(yīng)該不會是想去遍歷所有的子集,因為可能這會耗費幾分鐘或更長的時間。
希望這些技巧對你有用,這些示例代碼都使用C#實現(xiàn),但是你可以很容易得改變?yōu)槠渌?NET語言。
【編輯推薦】