mirror of
				https://github.com/go-gitea/gitea.git
				synced 2025-10-25 17:44:32 +02:00 
			
		
		
		
	Many places have the following logic:
```go
func (jobs ActionJobList) GetRunIDs() []int64 {
	ids := make(container.Set[int64], len(jobs))
	for _, j := range jobs {
		if j.RunID == 0 {
			continue
		}
		ids.Add(j.RunID)
	}
	return ids.Values()
}
```
this introduces a `container.FilterMapUnique` function, which reduces
the code above to:
```go
func (jobs ActionJobList) GetRunIDs() []int64 {
	return container.FilterMapUnique(jobs, func(j *ActionRunJob) (int64, bool) {
		return j.RunID, j.RunID != 0
	})
}
```
		
	
			
		
			
				
	
	
		
			22 lines
		
	
	
		
			679 B
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			22 lines
		
	
	
		
			679 B
		
	
	
	
		
			Go
		
	
	
	
	
	
| // Copyright 2024 The Gitea Authors. All rights reserved.
 | |
| // SPDX-License-Identifier: MIT
 | |
| 
 | |
| package container
 | |
| 
 | |
| import "slices"
 | |
| 
 | |
| // FilterSlice ranges over the slice and calls include() for each element.
 | |
| // If the second returned value is true, the first returned value will be included in the resulting
 | |
| // slice (after deduplication).
 | |
| func FilterSlice[E any, T comparable](s []E, include func(E) (T, bool)) []T {
 | |
| 	filtered := make([]T, 0, len(s)) // slice will be clipped before returning
 | |
| 	seen := make(map[T]bool, len(s))
 | |
| 	for i := range s {
 | |
| 		if v, ok := include(s[i]); ok && !seen[v] {
 | |
| 			filtered = append(filtered, v)
 | |
| 			seen[v] = true
 | |
| 		}
 | |
| 	}
 | |
| 	return slices.Clip(filtered)
 | |
| }
 |