4 různé způsoby vyhledávání položek ve sbírce

Automaticky přeloženo z Deepl

Jako vývojář často potřebujete zjistit, zda zadaná položka již v kolekci existuje, nebo najít všechny položky odpovídající určitým kritériím. Metody kolekcí 4D nabízejí mnoho různých způsobů, jak vyhledat konkrétní položky.

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 naši ukázku databáze, 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í

JAK najít položky v kolekci?

Podívejme se nyní na různé způsoby, které 4D nabízí pro vyhledávání položek v kolekci. Nejprve začneme vytvořením kolekce následujícím způsobem:

$col:=New collection(New object("Město"; "Paříž"; "Počasí";1))
$col .push(New object("Město"; "New-York"; "Počasí";-10))
$col .push(New object("Město"; "Tokio"; "Počasí";-5))
$col .push(New object("Město"; "Miami"; "Počasí";15))

Použití metod „some“ nebo „every“

Chcete-li zjistit, zda je alespoň jedna hodnota vaší kolekce větší než 0, můžete použít příkaz some metodu:

$b:=$col.some("WeatherGreaterThan0") // true

kde WeatherGreaterThan0 je metoda projektu, která se používá jako zpětné volání takto:

$1.result:=$1.value.Weather>0

Pokud nyní chcete zjistit, zda se všechny prvky vaší kolekce shodují s vlastním testem, stačí použít příkaz every:

$b:=$col.every("WeatherGreaterThan0") // false

Všimněte si, že stejnou metodu zpětného volání lze použít i pro mnoho dalších případů jako jakousi obecnou metodu.

filtrování kolekce

Kolekci můžete filtrovat podle výsledků metody zpětného volání pomocí metody filter metodou.

Stejným způsobem jako ve výše uvedených příkladech, pokud chcete vytvořit kolekci se všemi hodnotami většími než 0 z jiné kolekce:

filter("WeatherGreaterThan0")
// [{City:Paris,Weather:1},{City:Miami,Weather:15}].

najde první prvek odpovídající kritériu

Pokud hledáte první prvek kolekce, který se shoduje se zadanou metodou projektu, stačí použít příkaz find jako metodu zpětného volání:

$o:=$col.find("WeatherGreaterThan0") // {City:Paris,Weather:1}

Stejně tak, pokud hledáte index, a ne samotný prvek, použijte funkci findIndex:

$index:=$col .findIndex("WeatherGreaterThan0")
// $i=0 (první index kolekce
)

Získání indexu hledaného prvku

Nakonec můžete použít metodu indexOf a lastIndexOf k vyhledání výrazu mezi prvky kolekce a vrácení indexu prvního/posledního nalezeného výskytu:

$col2:=New collection(1;2; "Henry"; "Albert"; "Henry";6;4; "Henry";5)
$i :=$col2.indexOf("Henry") //$i=2 index of the first occurrence
$i :=$col2.lastIndexOf("Henry")
//$i=7 index of the last occurrence

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.