c 獲取多個集合的組合結果

2021-09-06 06:03:01 字數 1716 閱讀 1301

我的命題是多個int的list,每個集合任取乙個,求組合。

最終**為:

list a = new list() ;

list

b = new list() ;

list

c = new list() ;

var d = a.join(b, x => 1, x => 1, (x, y) => new list);

var e = d.join(c, x => 1, x => 1, (x, y) =>);

這裡主要用到的是集合的join方法。

join後面的引數的意思是,第乙個引數,join的物件集合。第二個引數是乙個函式,需要告訴程式第乙個集合的每個元素提取連線鍵的函式。第三個引數也是函式,同第二個的作用,不過物件是第二個集合。我這裡的處理是兩個函式返回相同的鍵,任何值都可以,只要相同就行了。也就是完全連線。最後乙個引數是連線成功之後,join函式返回什麼物件。這裡返回的是兩者相加的集合。

在求e的過程中,前面三個引數的填充原因和求d函式的引數是一致的。需要注意的是第四個引數。因為list是乙個物件,為了避免出現一些以外情況,我第一步將list複製到tem中,然後在tem的基礎上新增後來加入的y,並返回tem。

最後得到的結果d.count=9。為a,b的組合結果;e.count=27,裡面的每個元素都是長度為3的int集合。正是我想要的結果。

在這裡,大家可以試試這段**

list a = new list() ;

list

b = new list() ;

list

c = new list() ;

var d = a.join(b, x => 1, x => 1, (x, y) => new list);

var e = d.join(c, x => 1, x => 1, (x, y) =>

//var tem = x.tolist();

//return tem;

});

這段**最後生成的e也是長度為27,但是其中的元素卻是長度為5的集合。原因就在x的型別是list。在直接對x執行add時,引起x的不斷疊加。注意:在這裡,如果宣告

var tem = x;

效果和上面是一樣的,因為對tem也是list,直接用x對其複製,會直接將x和tem的指標指向乙個地方,修改tem和修改x的效果是一樣的。這裡必須用var tem = x.tolist();

12.11.22補充下段。繼續呼叫join。同樣是排列組合,但是有開關可以隨時控制那些集合參與排列組合:

前台有三個checkbox的控制項,分別對應下面的chkaa,chkbb,chkcc。

list lsta = new list() ;

list

lstb = new list() ;

list

lstc = new list() ;

var res = new liststring>>() ;

func

string>, liststring>>> func = lst =>).tolist();

};if (chkaa.checked) res =func(lsta);

if (chkbb.checked) res =func(lstb);

if (chkcc.checked) res = func(lstc);

可以做到隨時開關乙個集合,使其不參與最終的排列組合。此**是上面的擴充套件。

c 獲取多個集合的組合結果

我的命題是多個int的list,每個集合任取乙個,求組合。最終 為 list a new list list b new list list c new list var d a.join b,x 1,x 1,x,y new list var e d.join c,x 1,x 1,x,y 這裡主要用...

通過DataReader獲取多個結果集

我們知道,ado.net的datareader提供一種從資料庫讀取行的只進流的方式。通常情況下,我們都是針對乙個結果集進行處理。其實通過datareader的nextresult方法,我們可以批處理t sql,也就是可以獲取處理兩個或者多個結果集。下面通過乙個簡單的示例,來簡單說明一下這個功能。1 ...

C 獲取兩個集合中相同的和不同的結果

有乙個需求,伺服器根據客戶端傳過來的乙個陣列,找到資料庫中不包含該陣列資料的所有資料。本來是想用兩個for迴圈比較的,然後覺得太臃腫,於是去萬能的google看了下,果然,有更簡潔的寫法。遂記錄之。static void main string args int b ienumerable en a...