세트

Um Set é uma esttrutura de dados linear que possui uma coleção de valores que não se repetem. 음 세트 포드
armazenar valores únicos sem qualquer ordem specific.

아니요 실제, os 채팅과 대화의 대화에 참여하는 블로그의 게시물을 태그로 설정합니다.

세그레도, como queremos uma estrutura que não permitta dados duplicados vamos basear a esttrutura do set em uma outra estrutura do golang chamada map que é baseada em hash, um conjunto de chave valor.

Então definimos o segundo tipo de dados como boleano, assim sendo possível fazer comparações de true e false entre os valores.

type Set struct {
    estrutura map[int]bool
}

func (set *Set) Criar() {
    set.estrutura = make(map[int]bool)
}


삽입 방법



O método AddValor adiciona o valor a um Set.

승인 절차는 PossuiValor para verificar se existe o valor dentro do set.
베르다데이로 설정을 위해 메토도 não를 수행하십시오. 설정에 대한 정의를 내리십시오.

func (set *Set) AddValor(valor int) {

    if !set.PossuiValor(valor) {
        set.estrutura[valor] = true
    }
}


삭제 방법



Aqui éreproveitado o delete do próprio map da sdtlib do Golang então a implementationação é minima.

func (set *Set) DeletaValor(valor int) {

    delete(set.estrutura, valor)
}


조회 방법



O método PossuiValor do Set verifica se o valor existe ou não em set.estrutura e retorna um boolean com a resposta.

Definimos localizado como um boolean, o zaro value dele é false

Esse underline cheguei a comentar antes, mas ele anula o valor de uma variável, no caso aqui ele é anula o valor inteiro de set.estrutura para que a comparação possa ser feita apenas com o os boleanos.

func (set *Set) PossuiValor(valor int) bool {

    var localizado bool

    _, localizado = set.estrutura[valor]

    return localizado
}


InterSect 메서드



No codigo a seguir, o método CruzarCom retorna um setCruzado que consise na interseção de set e setDiferente.

Instanciamos um set que será o retorno da interseção, em seguida fazemos um loop ao longo da esttrutura já existente verificando apenas os valores, e anulando o segundo parametro do map que seria o boleano

PossuiValor no parametro para fazer a comparação e com o valor da condição reutilizamos AddValor para inserir o valor no set que instanciamos.

func (set *Set) CruzarCom(setDiferente *Set) *Set {

    var setCruzado = &Set{}
    setCruzado.Criar()
    var valor int

    for valor, _ = range set.estrutura {

        if setDiferente.PossuiValor(valor) {

            setCruzado.AddValor(valor)
        }
    }

    return setCruzado
}



유니온 방식



O método UnirCom retorna um setReunido que coniste em uma união de set e setDifferente.

Instanciamos setReunido que será o retorno. E reutilizamos AddValor percorrendo o set original e o set no parametro inserindo os valores no set instanciado.

func (set *Set) UnirCom(setDiferente *Set) *Set {

    var setReunido = &Set{}
    setReunido.Criar()
    var valor int

    for valor, _ = range set.estrutura {
        setReunido.AddValor(valor)
    }

    for valor, _ = range setDiferente.estrutura {
        setReunido.AddValor(valor)
    }

    return setReunido
}


주요 방법



Utilizando a estrutura set na main func.

func main() {

    var set *Set
    set = &Set{}

    set.Criar()

    set.AddValor(1)
    set.AddValor(2)

    fmt.Println("set inicial", set)
    fmt.Println(set.PossuiValor(1))

    var setDiferente *Set
    setDiferente = &Set{}

    setDiferente.Criar()
    setDiferente.AddValor(2)
    setDiferente.AddValor(4)
    setDiferente.AddValor(5)

    fmt.Println("outro set", set)

    fmt.Println("cruzamento de sets", set.CruzarCom(setDiferente))

    fmt.Println("união de sets", set.UnirCom(setDiferente))

}


산출:

set inicial &{map[1:true 2:true]}
true
outro set &{map[1:true 2:true]}
cruzamento de sets &{map[2:true]}
união de sets &{map[1:true 2:true 4:true 5:true]}

좋은 웹페이지 즐겨찾기