diff options
Diffstat (limited to 'docs/content/en/functions/collections/Complement.md')
-rw-r--r-- | docs/content/en/functions/collections/Complement.md | 86 |
1 files changed, 86 insertions, 0 deletions
diff --git a/docs/content/en/functions/collections/Complement.md b/docs/content/en/functions/collections/Complement.md new file mode 100644 index 000000000..28b7ded3d --- /dev/null +++ b/docs/content/en/functions/collections/Complement.md @@ -0,0 +1,86 @@ +--- +title: collections.Complement +linkTitle: complement +description: Returns the elements of the last collection that are not in any of the others. +categories: [functions] +keywords: [] +menu: + docs: + parent: functions +function: + aliases: [complement] + returnType: any + signatures: ['collections.Complement COLLECTION [COLLECTION]...'] +relatedFunctions: + - collections.Complement + - collections.Intersect + - collections.SymDiff + - collections.Union +aliases: [/functions/complement] +--- + +To find the elements within `$c3` that do not exist in `$c1` or `$c2`: + +```go-html-template +{{ $c1 := slice 3 }} +{{ $c2 := slice 4 5 }} +{{ $c3 := slice 1 2 3 4 5 }} + +{{ complement $c1 $c2 $c3 }} → [1 2] +``` + +{{% note %}} +Make your code simpler to understand by using a [chained pipeline]: + +[chained pipeline]: https://pkg.go.dev/text/template#hdr-Pipelines +{{% /note %}} + + +```go-html-template +{{ $c3 | complement $c1 $c2 }} → [1 2] +``` + +You can also use the `complement` function with page collections. Let's say your site has five content types: + +```text +content/ +├── blog/ +├── books/ +├── faqs/ +├── films/ +└── songs/ +``` + +To list everything except blog articles (`blog`) and frequently asked questions (`faqs`): + +```go-html-template +{{ $blog := where site.RegularPages "Type" "blog" }} +{{ $faqs := where site.RegularPages "Type" "faqs" }} +{{ range site.RegularPages | complement $blog $faqs }} + <a href="{{ .RelPermalink }}">{{ .LinkTitle }}</a> +{{ end }} +``` + +{{% note %}} +Although the example above demonstrates the `complement` function, you could use the [`where`] function as well: + +[`where`]: /functions/collections/where +{{% /note %}} + +```go-html-template +{{ range where site.RegularPages "Type" "not in" (slice "blog" "faqs") }} + <a href="{{ .RelPermalink }}">{{ .LinkTitle }}</a> +{{ end }} +``` + +In this example we use the `complement` function to remove [stop words] from a sentence: + +```go-html-template +{{ $text := "The quick brown fox jumps over the lazy dog" }} +{{ $stopWords := slice "a" "an" "in" "over" "the" "under" }} +{{ $filtered := split $text " " | complement $stopWords }} + +{{ delimit $filtered " " }} → The quick brown fox jumps lazy dog +``` + +[stop words]: https://en.wikipedia.org/wiki/Stop_word |