I’ve got 2000 posts. The following code below, counts the number of posts, and unique number of companies and countries from my posts.
The code works, but takes 10s to build so I’m wondering if there is a better way to achieve the same result.
content/posts 
+++
date = 2015-10-14T12:11:12+02:00
companies = ["Apple", "Microsoft"]
country = "Canada"
title = " Title"
+++
layout/posts/list.html 
{{$postCounter := 0}}
{{$.Scratch.Set "companyCounter" slice}}
{{$.Scratch.Set "countryCounter" slice}}
{{range .RegularPages}}
  {{$postCounter = add $postCounter 1}}
  {{range .Params.companies}}
    {{$.Scratch.Add "companyCounter" (slice .)}}
  {{end}}
  {{$.Scratch.Add "countryCounter" (slice .Params.country)}}
{{end}}
{{$postCounter}}
{{len ($.Scratch.Get "companyCounter" | uniq)}}
{{len ($.Scratch.Get "countryCounter" | uniq)}} 
            
              
            
           
          
            
            
              Did you know that there is partialCached?
That might be what you want to use.
             
            
              
            
           
          
            
              
                bep  
              
                  
                    June 22, 2020,  4:41pm
                   
                  3 
               
             
            
              @davidsneighbour  is right about the cache comment, but your construct looks a little too complicated. This should work:
{{$postCounter := 0}}
{{$companyCounter := 0}}
{{$countryCounter := 0}}
{{range .RegularPages}}
{{ $companyCounter = add $companyCounter (len .Params.companies) }}
{{ if .Params.country }}
{{ $countryCounter = add $countryCounter 1 }}
{{ end }}
{{ end }}
 
            
              1 Like 
            
            
           
          
            
            
              Thanks bep.
Your code works well for the postCounter and companyCounter, but the countryCounter doesn’t. It gives the same number as the postCounter.
Each markdown post has a country params and I’m looking for the number of unique  countries so if a markdown post has country = “Canada” and another has the same, it counts as one.
Not sure how to do this except for the method I’ve previously shown. I did manage to get the following to work:
{{$countryCounter := slice}}
{{range .RegularPages}}
  {{$countryCounter = append $countryCounter (slice .Params.country)}}
{{end}}
{{len ($countryCounter | uniq)}}
Problem is that performance wise this is worse than the original code.
             
            
              
            
           
          
            
              
                bep  
              
                  
                    June 22, 2020,  6:22pm
                   
                  5 
               
             
            
              
OK, I missed that …
What about:
{{ $countries := newScratch }}
{{range .RegularPages}}
{{ $countries.Set .Params.country true }}
{{ end }}
{{ $countryCount := len $countries.Values }}
 
            
              
            
           
          
            
            
              I’m getting the following error message:
executing "main" at <$countries.Values>: can't evaluate field Values in type *maps.Scratch