如何在Ruby中組合數(shù)組
"組合數(shù)組的最佳方法是什么?"這個(gè)問題非常模糊,可能意味著一些不同的事情。
連接
連接是將一件事附加到另一件事。例如,連接數(shù)組[1,2,3]和[4,5,6]將給你[1,2,3,4,5,6]。這可以用Ruby以幾種方式完成。
首先是加號(hào)操作員。這將附加一個(gè)數(shù)組到另一個(gè)數(shù)組的末尾,創(chuàng)建一個(gè)包含兩者元素的第三個(gè)數(shù)組。
或者,使用concat方法(+運(yùn)算符和concat方法在功能上等效)。
如果您'正在做很多這些操作,您可能希望避免這種情況。對(duì)象創(chuàng)建不是免費(fèi)的,并且這些操作中的每一個(gè)都創(chuàng)建第三個(gè)數(shù)組。如果要修改一個(gè)數(shù)組,使用新元素可以更長時(shí)間,您可以使用
代替預(yù)期的[1,2,3,4,5,6]陣列,我們得到[1,2,3,[4,5,6]]。這是有道理的,append運(yùn)算符獲取您給它的對(duì)象并將其附加到數(shù)組的末尾。它不知道或關(guān)心你試圖將另一個(gè)數(shù)組附加到數(shù)組。所以我們可以自己循環(huán)。
設(shè)置操作
世界"組合"也可用于描述設(shè)置操作。Ruby提供交叉,聯(lián)合和差異的基本集合操作。請(qǐng)記住,"sets"描述該集中**的一組對(duì)象(或數(shù)學(xué),數(shù)字)。例如,如果要對(duì)數(shù)組[1,1,2,3]進(jìn)行set操作,Ruby將過濾掉第二個(gè)1,即使1可能在結(jié)果集中。所以請(qǐng)注意,這些設(shè)置操作與列表操作不同。集合和列表是根本不同的事情。
你可以接受t的聯(lián)合wo集使用|運(yùn)算符。這是"or"運(yùn)算符,如果一個(gè)元素在一組或另一組中,則它在結(jié)果集中's。所以[1,2,3]|[3,4,5]的結(jié)果是[1,2,3,4,5](請(qǐng)記住,即使有兩個(gè)三個(gè),這是一個(gè)設(shè)置操作,而不是列表操作)。
兩組的交集是組合兩組的另一種方式。而不是"或"操作,兩組的交集是"和"操作。結(jié)果集的元素是和集中的元素。并且,作為一個(gè)"和"操作,我們使用&運(yùn)算符。因此,[1,2,3]&[3,4,5]的結(jié)果只是[3]。
最后,另一種方法是"組合"兩組是采取它們的區(qū)別。兩組的區(qū)別在于第一組中所有對(duì)象的集合在第二組中而不是。因此[1,2,3環(huán)保的小知識(shí)]-[3,4,5]是[1,2]。
Zipping
最后,有"壓縮。"兩個(gè)數(shù)組可以壓縮在一起,以相當(dāng)獨(dú)特的方式組合在一起。它'最好先展示它,然后解釋。[1,2,3].zip([3,4,5])的結(jié)果是[[1,3],[2,4],[3,5]]]。那這里發(fā)生了什么?將兩個(gè)數(shù)組組合在一起,第一個(gè)元素是兩個(gè)數(shù)組第一個(gè)位置中所有元素的列表。拉鏈有點(diǎn)奇怪,你可能找不到太多用處。它的目的是組合兩個(gè)元素密切相關(guān)的數(shù)組。