gopkg.in/essentialkaos/ek.v5@v5.7.1/sliceutil/sliceutil.go (about)

     1  // Package sliceutil provides methods for working with slices
     2  package sliceutil
     3  
     4  // ////////////////////////////////////////////////////////////////////////////////// //
     5  //                                                                                    //
     6  //                     Copyright (c) 2009-2016 Essential Kaos                         //
     7  //      Essential Kaos Open Source License <http://essentialkaos.com/ekol?en>         //
     8  //                                                                                    //
     9  // ////////////////////////////////////////////////////////////////////////////////// //
    10  
    11  import (
    12  	"errors"
    13  )
    14  
    15  // ////////////////////////////////////////////////////////////////////////////////// //
    16  
    17  // StringToInterface convert slice with strings to slice with interface{}
    18  func StringToInterface(data []string) []interface{} {
    19  	var result []interface{}
    20  
    21  	for _, r := range data {
    22  		result = append(result, r)
    23  	}
    24  
    25  	return result
    26  }
    27  
    28  // IntToInterface convert slice with ints to slice with interface{}
    29  func IntToInterface(data []int) []interface{} {
    30  	var result []interface{}
    31  
    32  	for _, r := range data {
    33  		result = append(result, r)
    34  	}
    35  
    36  	return result
    37  }
    38  
    39  // StringToError convert slice with strings to slice with errors
    40  func StringToError(data []string) []error {
    41  	var result []error
    42  
    43  	for _, e := range data {
    44  		result = append(result, errors.New(e))
    45  	}
    46  
    47  	return result
    48  }
    49  
    50  // ErrorToString convert slice with errors to slice with strings
    51  func ErrorToString(data []error) []string {
    52  	var result []string
    53  
    54  	for _, e := range data {
    55  		result = append(result, e.Error())
    56  	}
    57  
    58  	return result
    59  }
    60  
    61  // Contains check if string slice contains some value
    62  func Contains(slice []string, value string) bool {
    63  	if len(slice) == 0 {
    64  		return false
    65  	}
    66  
    67  	for _, v := range slice {
    68  		if v == value {
    69  			return true
    70  		}
    71  	}
    72  
    73  	return false
    74  }
    75  
    76  // Exclude return slice without items in second given slice
    77  func Exclude(slice []string, items []string) []string {
    78  	var result []string
    79  
    80  LOOP:
    81  	for _, i := range slice {
    82  		for _, j := range items {
    83  			if i == j {
    84  				continue LOOP
    85  			}
    86  		}
    87  
    88  		result = append(result, i)
    89  	}
    90  
    91  	return result
    92  }
    93  
    94  // Deduplicate return slice without duplicates. Given slice must be sorted
    95  // before deduplication
    96  func Deduplicate(slice []string) []string {
    97  	sliceLen := len(slice)
    98  
    99  	if sliceLen <= 1 {
   100  		return slice
   101  	}
   102  
   103  	var (
   104  		result   []string
   105  		lastItem string
   106  	)
   107  
   108  	for _, v := range slice {
   109  		if lastItem == v {
   110  			continue
   111  		}
   112  
   113  		result = append(result, v)
   114  		lastItem = v
   115  	}
   116  
   117  	return result
   118  }