You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							52 lines
						
					
					
						
							843 B
						
					
					
				
			
		
		
		
			
			
			
		
		
	
	
							52 lines
						
					
					
						
							843 B
						
					
					
				
								package util
							 | 
						|
								
							 | 
						|
								import (
							 | 
						|
									"fmt"
							 | 
						|
									"sort"
							 | 
						|
								)
							 | 
						|
								
							 | 
						|
								// HumanReadableIntsMax joins a serials of inits into a smart one like 1-3 5 ... for human readable.
							 | 
						|
								func HumanReadableIntsMax(max int, ids ...int) string {
							 | 
						|
									if len(ids) <= max {
							 | 
						|
										return HumanReadableInts(ids...)
							 | 
						|
									}
							 | 
						|
								
							 | 
						|
									return HumanReadableInts(ids[:max]...) + " ..."
							 | 
						|
								}
							 | 
						|
								
							 | 
						|
								// HumanReadableInts joins a serials of inits into a smart one like 1-3 5 7-10 for human readable.
							 | 
						|
								func HumanReadableInts(ids ...int) string {
							 | 
						|
									sort.Ints(ids)
							 | 
						|
								
							 | 
						|
									s := ""
							 | 
						|
									start := 0
							 | 
						|
									last := 0
							 | 
						|
								
							 | 
						|
									for i, v := range ids {
							 | 
						|
										if i == 0 {
							 | 
						|
											start = v
							 | 
						|
											last = v
							 | 
						|
											s = fmt.Sprintf("%d", v)
							 | 
						|
											continue
							 | 
						|
										}
							 | 
						|
								
							 | 
						|
										if last+1 == v {
							 | 
						|
											last = v
							 | 
						|
											continue
							 | 
						|
										}
							 | 
						|
								
							 | 
						|
										if last > start {
							 | 
						|
											s += fmt.Sprintf("-%d", last)
							 | 
						|
										}
							 | 
						|
								
							 | 
						|
										s += fmt.Sprintf(" %d", v)
							 | 
						|
										start = v
							 | 
						|
										last = v
							 | 
						|
									}
							 | 
						|
								
							 | 
						|
									if last != start {
							 | 
						|
										s += fmt.Sprintf("-%d", last)
							 | 
						|
									}
							 | 
						|
								
							 | 
						|
									return s
							 | 
						|
								}
							 |