aprendago icon indicating copy to clipboard operation
aprendago copied to clipboard

Exercício: Capítulo 11, Exercício 2 (Nível: 5)

Open vkorbes opened this issue 4 years ago • 12 comments

Exercício: Capítulo 11, Exercício 2 (Nível: 5)

Link para o vídeo:

Use esta thread para compartilhar sua solução, discutir o exercício com os colegas e pedir ajuda caso tenha dificuldades!

vkorbes avatar Sep 30 '20 17:09 vkorbes

Esse exercício foi o primeiro que tive que dar uma colada, lembrei como criar o map, mas não lembrava como atribuir os valores e ainda mais usando o type diferente ajudou a confundir um pouco mais kkkk. Terei que revisar o mesmo por alguns dias até fixar bem o conteúdo.

https://play.golang.org/p/HcPKmDvh_qB

diegoparra avatar Oct 09 '20 00:10 diegoparra

Para criar o map, raciocinei um pouco diferente nesta questão

https://play.golang.org/p/hS8YSZ6V5Li

ph-py avatar Dec 27 '20 20:12 ph-py

https://play.golang.org/p/l0NKoutQ4RA

package main

import (
	"fmt"
)

type pessoa struct {
	nome, sobrenome string
	sabores         []string
}

func main() {

	m := make(map[string]pessoa)

	m["barbosa"] = pessoa{
		nome:      "eduardo",
		sobrenome: "barbosa",
		sabores:   []string{"abacate", "chocolate", "morango"},
	}

	m["Rocha"] = pessoa{
		nome:      "Maria",
		sobrenome: "Rocha",
		sabores:   []string{"Maracuja", "Morango"},
	}

	for _, v := range m {
		fmt.Println(v.nome)
		for _, sabor := range v.sabores {
			fmt.Println("\t", sabor)

		}

	}

}

Output

eduardo
	 abacate
	 chocolate
	 morango
Maria
	 Maracuja
	 Morango

Program exited.

an4kein avatar Feb 19 '21 21:02 an4kein

Precisei voltar na aula de map, para lembrar como se cria um map com valores dentro. Depois, para acertar os tipos, foi na base da tentativa erro, até começar a tirar conclusões lógicas: o índex é uma string (e não algo como pessoa.sobrenome). pessoa.Sobrenome é uma string da pessoa1 e da pessoa 2 e claro, pessoa é um objeto. Então posso guardar objetos como valores de um mapa. Pra que outros alunos possam entender a diferença da iteração usando structs direto e usando structs com map, deixei as duas formas na solução. Tb não quis tentar usar funções, como o assunto ainda não foi ministrado, o desafio é tentar fazer sem. É como se estivesse numa ilha deserta e tivesse que construir uma jangada sem usar serrote.


package main

import "fmt"

type pessoa struct {
	Nome             string
	Sobrenome        string
	sorveteFavoritos []string
}

func main() {

	pessoa1 := pessoa{
		Nome:             "alan",
		Sobrenome:        "Santos",
		sorveteFavoritos: []string{"chocolate", "banana"},
	}

	pessoa2 := pessoa{
		Nome:             "Henrique",
		Sobrenome:        "Beltrão",
		sorveteFavoritos: []string{"limão", "pera"},
	}

	fmt.Println()
	fmt.Println("Iterando via Struct")
	fmt.Println("----------------------------")

	pessoas := []pessoa{pessoa1, pessoa2}

	for _, p := range pessoas {
		fmt.Println(p.Nome, p.Sobrenome)
		for _, s := range p.sorveteFavoritos {
			fmt.Printf(" \t-%v\n", s)
		}
	}
	fmt.Println()
	fmt.Println("Iterando via MAP")
	fmt.Println("----------------------------")

	mapaPessoa := map[string]pessoa{
		pessoa1.Sobrenome: pessoa1,
		pessoa2.Sobrenome: pessoa2,
	}

	for k, v := range mapaPessoa {

		fmt.Println(k)
		for _, s := range v.sorveteFavoritos {
			fmt.Printf("\t-%v\n", s)
		}
	}

}

alansantosmg avatar Apr 22 '21 05:04 alansantosmg

Estou procurando escrever código mais arquiteturado possível, limpando a view (func main) e isolando em um função as responsabildades, ou seja, a criação de dados, criação da string para impressão dos dados e conversão para map do slice. Usei artificios da linguagem que ainda não vi nas aulas (recursão e string builder), mas achei importante para eu praticar o que aprendi com o códigos que me ensinaram e que me inspiraram. Talvez te ajude a evoluir também :)

https://play.golang.org/p/3lePKlUmfK_l
package main

import (
	. "fmt"
	"strings"
)

// person struct representation
type person struct {
	firstname, lastname string
	icecream_flavours   []flavour
}

// flavour struct representation to
// compose person flavour preferences
type flavour struct {
	name string
}

func main() {
	//get people data to process
	people := getpeopledata()

	// get a map of people recursively
	var collect = collectiontomap(0, people, map[string]person{})

	// print all in map collection
	for _, v := range collect {
		Println(v.tostring())
	}
}

// return a slice of person to process
func getpeopledata() []person {
	//create a person with your's favorite flocours
	p := person{
		firstname: "Fulano A.",
		lastname:  "Pinheiro",
	}
	f := []flavour{
		{name: "BlueBerry"},
		{name: "Green Florest"},
		{name: "Baca Baca"},
		{name: "FlueBird Ice"},
	}
	p.icecream_flavours = f

	// and more one
	z := person{
		firstname: "Beltrano C.",
		lastname:  "Souza",
		icecream_flavours: []flavour{
			{name: "TanDam"},
			{name: "Lsd Percursion"},
			{name: "Loki Orange"},
		},
	}

	return []person{p, z}
}

// get a custom string of a person to print
func (p person) tostring() string {
	s := Sprintf("%v, %v\n\t| Flavours:", p.lastname, p.firstname)

	// get a custom string of your flavours and concat
	// to return a complete string representation
	return Sprintln(s, "\n", p.printflavours())
}

// get a custom string of flavours of a person
func (p person) printflavours() string {
	var b strings.Builder
	b.Grow(32)

	for i, v := range p.icecream_flavours {
		Fprintf(&b, "\t  %v. %s;\n", i, v)
	}
	return b.String()
}

// return an conversion to map of slice of person
// this func call him recursively at last person on slice
func collectiontomap(counter int, collect []person, _map map[string]person) map[string]person {
	if counter == len(collect) {
		return _map
	}

	_map[collect[counter].lastname] = collect[counter]

	counter++
	// recursive with the entry data
	return collectiontomap(counter, collect, _map)
}

Resultado:

Pinheiro, Fulano A.
        | Flavours: 
          0. {BlueBerry};
          1. {Green Florest};
          2. {Baca Baca};
          3. {FlueBird Ice};


Souza, Beltrano C.
        | Flavours: 
          0. {TanDam};
          1. {Lsd Percursion};
          2. {Loki Orange};```

guiganzer avatar Jun 10 '21 15:06 guiganzer

https://play.golang.org/p/WyXt0ldZyQk

Lucasmirandar avatar Jun 10 '21 20:06 Lucasmirandar

package main

import (
	"fmt"
)

type pessoa struct {
	nome      string
	sobrenome string
	sorvetes  []string
}

func main() {
	pessoa1 := pessoa{
		nome:      "Tomás",
		sobrenome: "Almeida",
		sorvetes:  []string{"coco", "tapioca"},
	}

	pessoa2 := pessoa{
		nome:      "Evelyn",
		sobrenome: "Perdigão",
		sorvetes:  []string{"belga", "chocolate meio amargo"},
	}

	pessoas := map[string]pessoa{
		"Almeida":  pessoa1,
		"Perdigão": pessoa2,
	}

	for _, value := range pessoas {
		fmt.Printf("Nome: %v, Sobrenome: %v\n", value.nome, value.sobrenome)
		fmt.Println("Sorvetes favoritos:")

		for _, sabor := range value.sorvetes {
			fmt.Println("\t", sabor)
		}
	}
}

tomashugo avatar Oct 11 '21 21:10 tomashugo

https://go.dev/play/p/ZKWPezYz0yg

viniciussanchez avatar Mar 18 '22 12:03 viniciussanchez

Cap. 11 – Exercícios: Nível #5 – 2 https://go.dev/play/p/PfFdGlfci-u

image

wfrsilva avatar May 28 '22 23:05 wfrsilva

https://go.dev/play/p/NPIo9OSZZAq

Harsgaard avatar Dec 04 '22 05:12 Harsgaard

Achei esse ex muito bom, show professora!

package main

import "fmt"

type pessoa struct {
	Nome      string
	Sobrenome string
	sabores   []string
}

func main() {

	pessoa1 := pessoa{
		Nome:      "Udson",
		Sobrenome: "Willams",
		sabores:   []string{"chocolá", "morango"},
	}

	pessoa2 := pessoa{"33213", "Maria", []string{"balnilha", "morango"}}

	fmt.Print(pessoa1, pessoa2)

	map_pessoa := map[string]pessoa{
		pessoa1.Sobrenome: pessoa1,
		pessoa2.Sobrenome: pessoa2,
	}

	for k, v := range map_pessoa {
		fmt.Printf("\nchave: %v | com pessoa: %v", k, v)
		for _, value := range v.sabores {
			fmt.Printf("\nsabores preferidos: %v", value)
		}
	}
	fmt.Println()
}

UdsonWillams avatar Apr 24 '24 00:04 UdsonWillams

https://go.dev/play/p/VOwIHWxtfdX

DominMFD avatar May 15 '24 16:05 DominMFD