Kombinování a třídění sbírek

Automaticky přeloženo z Deepl

4D v16 R6 opens a wide range of possibilities to manage collections. Mergování dvou kolekcído jedné, klonování nebo jen uspořádání kolekce je stejně snadné jako volání metody. Ušetříte tak drahocenný čas, například když potřebujete spojit dvě kolekce, ponechat pouze odlišné hodnoty nebo je seřadit.

Tento článek je součástí seriálu, který ukazuje, jak manipulovat s kolekcemi pomocí metod přidaných na 4D v16 R6. Chcete-li se dozvědět ještě více, stáhněte si náš databázový příklad, který obsahuje 12 různých příkladů ukazujících, co všechno lze s metodami kolekcí dělat!

Příklad databáze: Správa kolekcí

Kopírování kolekce

Hluboké kopírování

Na adrese copy vrací hlubokou kopii instance kolekce. Hluboká kopie znamená, že všechny prvky v původní kolekci jsou duplikovány a nesdílejí s vrácenou kolekcí žádný odkaz.

V níže uvedeném příkladu provedeme hloubkovou kopii pomocí metody copy přidá nový prvek do $col2 (a copy of the first collection – $col). An další prvek je přidán do $col2, however $col remains unchanged:

//vytvoření kolekce
$col
:=Novákolekce("a"; "b"; "c"; "d"; "e")
//vytvoření hluboké kopie první kolekce
$col2:=$col.copy($col)
//přidejte nový prvek do kopie první kolekce
$col2.push("f")
// $col=["a", "b", "c", "d, "e"]

// $col2=["a", "b", "c", "d, "e", "f"]

Mělké kopírování

Když provedete mělkou kopii kolekce, prvky v původní kolekci sdílejí své reference s vrácenou kolekcí. Pokud například vytvoříte kolekci, vytvoříte její typickou mělkou kopii a poté do této kopie přidáte nový prvek ($col2)), původní kolekce ($col) bude tuto změnu také reflektovat, protože $col a $col2 sdílejí své reference:

//vytvoření kolekce
$col
:=Novákolekce("a"; "b"; "c"; "d"; "e")
//vytvoření mělké kopie první kolekce
$col2:=$col

//přidání nového prvku do kopie první kolekce

$col2.push("f")
// $col2=$col=["a", "b", "c", "d, "e", "f"]

Mělkou kopii části kolekce můžete vytvořit pomocí odkazu slice metody:

//create a collection
$col
:=New collection("a"; "b"; "c"; "d"; "e")
// Copy from index 2 and stop at end of collection -1
$col2 :=$col.slice(2;-1
)
//$col2=[c,d]

Kombinování kolekcí

Spojení dvou kolekcí lze provést buď pomocí metody concat nebo combine metody.

. concat vrátí novou kolekci, která bude tvořena spojením obou kolekcí:

//create 2 collections
$col
:=Novákolekce("a"; "b"; "c")
$col2:=Novákolekce(1;2;3)
//sloučíme 2 kolekce do 3. kolekce
$col3:=$col.concat($col2)
//$col3=["a", "b", "c",1,2,3]

. combine metoda přidá každý prvek kolekce (předaný v parametru) na konec původní kolekce:

//create 2 collections
$col
:=Novákolekce("a"; "b"; "c")
$col2:=Novákolekce(1;2;3)
//přidáme 2. kolekci na konec první kolekce
$col.combine($col2)
//$col=["a", "b", "c",1,2,3]

. distinct metoda vytvoří novou kolekci obsahující pouze odlišné (rozdílné) hodnoty z původní kolekce:

$col:=New collection("a"; "b"; "c"; "a"; "b"; "c"; "d"; "e")
$col2 :=$col.distinct()
//$col2=[a,b,c,d,e]

Třídění kolekce

Chcete-li kolekci seřadit, můžete použít metodu sort nebo . orderBy metody. . sort modifikuje původní kolekci, zatímco metoda orderBy vrací zcela novou (mělkou kopii) setříděnou kolekci, ale původní kolekci nemodifikuje:

$col:=Novákolekce("a"; "b"; "c"; "a"; "b"; "c"; "d"; "e")
$col2:=$col.orderBy()
//$col2=["a", "a", "b", "b", "c", "c", "d", "e"]

//$col=["a", "b", "c", "a", "b", "c", "d", "e"]

$col.sort()
//$col=["a", "a", "b", "b", "c", "c", "d", "e"]

Kolekci můžete také třídit pomocí sort nebo orderByMethod, což vyžaduje zpětné volání metody:

$col:=Newcollection("Orange"; "Apple"; "Grape"; "Pear"; "Banana"; "Fig"; "Blackberry"; "Passion fruit")
$col2:=$col.orderByMethod("WordLength")
//$col2=[Mučenka,Ostružina,Pomeranč,Banán,Jablko,Hroznové víno,Hruška,Fík]
$col.sort("WordLength")
//$col=[Mučenka,Ostružina,Pomeranč,Banán,Jablko,Hroznové víno,Hruška,Fík]

Kde metoda zpětného volání WordLength je jednou z metod vašeho projektu:

$1.result:=Length(String($1.value))>Length(String($1.value2))

Nakonec můžete vytvořit hloubkovou kopii kolekce se všemi jejími prvky v opačném pořadí pomocí funkce reverse:

$col:=Novákolekce(1;3;5;2;4;6)
$col2:=$col.reverse()
//$c2=[6,4,2,5,3,1]

Fabrice Mainguené
- Product Owner -Fabrice Mainguené se připojil k týmu 4D Program v listopadu 2016. Jako Product Owner má na starosti psaní uživatelských příběhů, které následně převádí do funkčních specifikací. Jeho úkolem je také zajistit, aby dodaná implementace funkcí splňovala potřeby zákazníků.Po získání bakalářského titulu v oboru informatiky na CNAM nastoupil Fabrice do malé softwarové vydavatelské společnosti jako vývojář Windev. Poté pracoval pro různé společnosti v oblasti průmyslu a obchodu jako vývojář aplikací Windev a webových aplikací a také jako technický poradce pro nové funkce.