1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/1046102779-slicelement

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
README.md 3.9 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
gitlife-traslator Отправлено 25.11.2024 09:59 8c4d18d

Пакет slicelement

Go-библиотека для поиска элемента в срезе или работы с множествами, включая объединение, пересечение и разность.

Поддерживает не только встроенные типы, такие как []int/[]*int, []float/[]*float, []string/[]*string, но и []struct/[]*struct. Последнее является очень важным и удобным.

Установка

Стандартная команда go get:

    $  go get -v -u github.com/1046102779/slicelement

Индекс

//  находит элемент, существует ли он в данных, если существует, возвращает true, nil 
func Contains(data interface{}, elem interface{}, tag string) (bool, error)

// получает индекс элемента в данных, если не существует, возвращает -1, nil. 
func GetIndex(data interface{}, elem interface{}, tag string) (int, error)

// разность множеств, формула: dataC =  dataA - dataB
// Параметр tag: уникальный ключ. Если нет, то может быть перекрыто.
// Например, тип User struct { UserId int, Name string, Tel string, Sex int16}
// var ( usersA, usersB []*User )
func GetDifference(dataA interface{}, dataB interface{}, tag string) (interface{}, error)

// пересечение множеств, формула: dataC = dataA ∩ dataB , также поддерживает срез структуры
// Параметр tag: уникальный ключ. Если нет, то может быть перекрыто.
// Например, тип User struct { UserId int, Name string, Tel string, Sex int16}
// var ( usersA, usersB []*User )
func GetInteraction(dataA interface{}, dataB interface{}, tagName string) (interface{}, error) 

// объединение множеств, формула: dataC = dataA U dataB
// Параметр tag: уникальный ключ. Если нет, то может быть перекрыто.
// Например, тип User struct { UserId int, Name string, Tel string, Sex int16}
// var ( usersA, usersB []*User )
func GetUnion(dataA interface{}, dataB interface{}, tagName string) ( interface{}, error)

описание: если тип данных не []*struct/[]struct, значение тега пусто

Использование & Пример

Для использования и примеров см. Godoc.

Пример 1: []struct GetIndex

data := []*Person{
    &Person{
        Name:     "John",
        Age:      29,
        Children: []string{"David", "Lily", "Bruce Lee"},
    },
    &Person{
        Name:     "Joe",
        Age:      18,
        Children: []string{},
    },
}
elem := 18
index, err := slicelement.GetIndex(data, elem, "Age")
if err != nil {
    fmt.Println(err.Error())
}
fmt.Println("index=", index)
// вывод: index=1

Пример 2: []struct GetUnion

type Student struct {
    Name string
    Age  int
}
studentA := []Student{             studentB := []Student{
    Student{                            Student{
        Name: "donghai",                    Name: "Joe",
        Age:  29,                           Age:  18,
    },                                  },
    Student{                            Student{
        Name: "jixaing",                    Name: "David",
        Age:  19,                           Age:  19,
    },                                  },
}                                   }

if studentC, err := slicelement.GetUnion(studentA, studentB, "Age"); err != nil {
    fmt.Println(err.Error())
} else {
    fmt.Println("result: ", studentC)
}
// результат: [{donghai 29} {jixaing 19} {Joe 18}]  
// {"David", 19} перекрывается {"jixiang", 19}

Опубликовать ( 0 )

Вы можете оставить комментарий после Вход в систему

1
https://api.gitlife.ru/oschina-mirror/1046102779-slicelement.git
git@api.gitlife.ru:oschina-mirror/1046102779-slicelement.git
oschina-mirror
1046102779-slicelement
1046102779-slicelement
master