鑑於項目的集合,我如何基於謂詞拆分成集2子集?LINQ本身是否支持將一個集合分爲兩部分?
你可以做2個在哪裏搜索,但隨後的運行時間爲2 * N(其中,同時仍然爲O(n),需要兩倍長,顯然不是首選)
IEnumerable<int> even = nums.Where(i => IsEven(i));
IEnumerable<int> odd = nums.Where(i => !IsEven(i));
你可以這樣做一個單獨的線性傳遞(這裏重構爲一個擴展方法),但這意味着你必須將這些代碼全部拖拽到一起,而更多的自定義代碼使得事情不易維護。
public static void SplitOnPred<T>(
this IEnumerable<T> collection,
Func<T, bool> pred,
out IEnumerable<T> trueSet,
out IEnumerable<T> falseSet
) {
List<T> trueSetList = new List<T>();
List<T> falseSetList = new List<T>();
foreach(T item in collection) {
if(pred(item)) {
trueSetList.Add(item);
} else {
falseSetList.Add(item);
}
}
trueSet = trueSetList;
falseSet = falseSetList;
}
問: LINQ是否有在1個通拆分收取任何原生支持?
爲什麼你需要一個線性路徑? – 2012-08-13 17:04:40
@SaeedAmiri它不是一個真正的需求,以及2線性傳遞是在大多數情況下_good enough_但我從來沒有與_good enough_的表現真的很開心:P – James 2012-08-13 17:06:49