aprendago icon indicating copy to clipboard operation
aprendago copied to clipboard

Exercício: Capítulo 9, Exercício 6 (Nível: 4)

Open vkorbes opened this issue 4 years ago • 18 comments

Exercício: Capítulo 9, Exercício 6 (Nível: 4)

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

https://play.golang.org/p/5ImpADhNsW7

diegoparra avatar Oct 07 '20 23:10 diegoparra

package main

import("fmt")

func main(){
  estados:= make([]string,15,20)
  estados = []string{
    "Acre", 
    "Alagoas",
    "Amapá", 
    "Amazonas",
    "Bahia", 
    "Ceará", 
    "Espírito Santo", 
    "Goiás", 
    "Maranhão", 
    "Mato Grosso",
    "Mato Grosso do Sul",
  }
  estados = append(estados,"Minas Gerais", "Pará", "Paraíba", 
  "Paraná", "Pernambuco", "Piauí", "Rio de Janeiro", 
  "Rio Grande do Norte", "Rio Grande do Sul", "Rondônia", 
  "Roraima", "Santa Catarina", "São Paulo", "Sergipe", "Tocantins" )

  fmt.Println(len(estados),cap(estados))

for x:=0; x < len(estados);x++{
  fmt.Println(estados[x])
}
  
}

haystem avatar Nov 20 '20 03:11 haystem

Olá, se aumentarmos a capacidade do slice no make, a mesma não deveria ser informada no print? ex. colocar cap 100 no make e na hora do print, o cap deve mostrar 100

Aparentemente, nas respostas apresentadas, quando em seguida ao make fazemos o slice literal, está a assumir o cap baseado no len desse slice e qualquer alteração na chamada do make (len ou cap) não são levados em consideração.

fiz um exemplo onde ao se mudar os valores do make, o mesmo reflete no restante do código

make com um valor de cap maior q o len https://play.golang.org/p/vcQLafr-Fuu

make com valor igual ao len e que ao adicionar mais 1 valor, o cap é aumentado automaticamente. https://play.golang.org/p/ILl6gldDxZ7

faz sentido?

ghtms avatar Dec 26 '20 21:12 ghtms

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

Observei que podemos começar o  length and capacity com 0 zero, se não soubermos a quantidade de dados que nossa slice vai receber.

package main

import (
	"fmt"
)

func main() {
	estados := make([]string, 0, 0)
	fmt.Println("length before: ", len(estados))
	fmt.Println("capacity before: ",cap(estados))
	fmt.Println("")
	estados = append(estados, "Acre", "Alagoas", "Amapá", "Amazonas", "Bahia", "Ceará", "Espírito Santo", "Goiás", "Maranhão", "Mato Grosso", "Mato Grosso do Sul", "Minas Gerais", "Pará", "Paraíba", "Paraná", "Pernambuco", "Piauí", "Rio de Janeiro", "Rio Grande do Norte", "Rio Grande do Sul", "Rondônia", "Roraima", "Santa Catarina", "São Paulo", "Sergipe", "Tocantins")
	fmt.Println(estados)
	fmt.Println("")
	fmt.Println("length after: ",len(estados))
	fmt.Println("capacity after: ",cap(estados))
	fmt.Println("")
	for i := 0; i < len(estados); i++ {
		fmt.Println(estados[i])
	}

}

Output

length before:  0
capacity before:  0

[Acre Alagoas Amapá Amazonas Bahia Ceará Espírito Santo Goiás Maranhão Mato Grosso Mato Grosso do Sul Minas Gerais Pará Paraíba Paraná Pernambuco Piauí Rio de Janeiro Rio Grande do Norte Rio Grande do Sul Rondônia Roraima Santa Catarina São Paulo Sergipe Tocantins]

length after:  26
capacity after:  26

Acre
Alagoas
Amapá
Amazonas
Bahia
Ceará
Espírito Santo
Goiás
Maranhão
Mato Grosso
Mato Grosso do Sul
Minas Gerais
Pará
Paraíba
Paraná
Pernambuco
Piauí
Rio de Janeiro
Rio Grande do Norte
Rio Grande do Sul
Rondônia
Roraima
Santa Catarina
São Paulo
Sergipe
Tocantins

Program exited.

an4kein avatar Feb 18 '21 15:02 an4kein

My solution:

package main

import "fmt"

func main() {

	estados := make([]string, 26)

	estados = []string{"Acre", "Alagoas", "Amapá", "Amazonas", "Bahia", "Ceará", "Espírito Santo", "Goiás", "Maranhão", "Mato Grosso", "Mato Grosso do Sul", "Minas Gerais", "Pará", "Paraíba", "Paraná", "Pernambuco", "Piauí", "Rio de Janeiro", "Rio Grande do Norte", "Rio Grande do Sul", "Rondônia", "Roraima", "Santa Catarina", "São Paulo", "Sergipe", "Tocantins"}

	for i := 0; i < len(estados); i++ {

		fmt.Println(estados[i])
	}

	fmt.Println("Len: ", len(estados), "Cap: ", cap(estados))

}

alansantosmg avatar Apr 21 '21 14:04 alansantosmg

Se eu não souber quantos dados vou colocar no slice, então eu não preciso criá-lo com make. Entendi que o make é justamente para que eu possa controlar o len e o cap. Pelo que li da documentação, quando o comprimento dos dados (len) excedem o cap (ao fazer um append), Go dobra o cap.

alansantosmg avatar Apr 21 '21 15:04 alansantosmg

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

Lucasmirandar avatar Jun 09 '21 23:06 Lucasmirandar

package main

import "fmt"

func main() {
	slice := make([]string, 26, 26)

	slice = []string{"Acre", "Alagoas", "Amapá", "Amazonas", "Bahia", "Ceará",
		"Espírito Santo", "Goiás", "Maranhão", "Mato Grosso",
		"Mato Grosso do Sul", "Minas Gerais", "Pará", "Paraíba",
		"Paraná", "Pernambuco", "Piauí", "Rio de Janeiro",
		"Rio Grande do Norte", "Rio Grande do Sul", "Rondônia",
		"Roraima", "Santa Catarina", "São Paulo", "Sergipe", "Tocantins"}

	fmt.Println(len(slice), cap(slice))

	for i := 1; i <= len(slice)-1; i++ {
		fmt.Println(slice[i])
	}
}

andersoncleyson avatar Sep 13 '21 11:09 andersoncleyson

package main

import (
	"fmt"
)

func main() {
	estados := make([]string, 0, 54)
	estados = append(estados, "Acre", "Alagoas", "Amapá", "Amazonas", "Bahia", "Ceará", "Espírito Santo", "Goiás", "Maranhão", "Mato Grosso", "Mato Grosso do Sul", "Minas Gerais", "Pará", "Paraíba", "Paraná", "Pernambuco", "Piauí", "Rio de Janeiro", "Rio Grande do Norte", "Rio Grande do Sul", "Rondônia", "Roraima", "Santa Catarina", "São Paulo", "Sergipe", "Tocantins")
	fmt.Println(len(estados), cap(estados))

	for i := 0; i < len(estados); i++ {
		fmt.Println(estados[i])
	}
}

tomashugo avatar Oct 10 '21 16:10 tomashugo

https://go.dev/play/p/II0Q-imj_HY

viniciussanchez avatar Mar 17 '22 16:03 viniciussanchez

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

AlissonAp avatar Apr 15 '22 01:04 AlissonAp

Cap. 9 – Exercícios: Nível #4 – 6 https://go.dev/play/p/YBMVuE8hUdX

image

wfrsilva avatar May 28 '22 04:05 wfrsilva

Adicionando os nomes dos estados com um append, ao invés de reatribuindo os valores ao slice, o array subjacente continua o mesmo (desde que não exceda sua capacidade estabelecida no make), evitando assim o custo computacional adicional de se criar outro array subjacente.

Para entender melhor, no código abaixo o slice criado tem capacidade 30, e usando o append, como a capacidade não é ultrapassada, a capacidade continua a mesma. Ou seja, o array subjacente não mudou.

Caso, ao invés de fazer com o append, fazer a reatribuição com estados = []string{...}, ao se verificar a capacidade, será exibida a capacidade igual ao length. Logo, o array subjacente não é mais o mesmo do que foi criado usando o make anteriormente. Para testar, copiando o código abaixo ou pelo link, basta comentar o slice criado a partir do append, e tirar o comentário do que foi criado pela reatribuição. https://go.dev/play/p/EF_OH7gjSkC

Essa observação foi feita em um comentário do vídeo, pelo Ronan, e notando fiz também os testes, mas realizando a adição dos elementos de um modo (append) diferente do sugerido lá. Sou iniciante na linguagem, não sei se tudo que comentei aqui faz sentido, mas deixo também observação.

No mais, deixo meu agradecimento à professora. Obrigado pelo curso Ellen, está muito bom mesmo.

package main

import "fmt"

func main() {
	estados := make([]string, 0, 30)
	
	//Usando o append
	estados = append(estados, "Acre", "Alagoas", "Amapá", "Amazonas", "Bahia", "Ceará", "Espírito Santo", "Goiás", "Maranhão", "Mato Grosso", "Mato Grosso do Sul", "Minas Gerais", "Pará", "Paraíba", "Paraná", "Pernambuco", "Piauí", "Rio de Janeiro", "Rio Grande do Norte", "Rio Grande do Sul", "Rondônia", "Roraima", "Santa Catarina", "São Paulo", "Sergipe", "Tocantins")
	
	//Reatribuindo
	//estados = []string{"Acre", "Alagoas", "Amapá", "Amazonas", "Bahia", "Ceará", "Espírito Santo", "Goiás", "Maranhão", "Mato Grosso", "Mato Grosso do Sul", "Minas Gerais", "Pará", "Paraíba", "Paraná", "Pernambuco", "Piauí", "Rio de Janeiro", "Rio Grande do Norte", "Rio Grande do Sul", "Rondônia", "Roraima", "Santa Catarina", "São Paulo", "Sergipe", "Tocantins"}

	fmt.Printf("len: %v || cap: %v\n\n", len(estados), cap(estados))
	
	for i := 0; i < len(estados); i++ {
		fmt.Println(i+1, ":", estados[i])
	}
}

Levison-Jr avatar Oct 29 '22 16:10 Levison-Jr

func main() { estados := make([]string, 26, 26) estados = []string{ "Acre", "Alagoas", "Amapá", "Amazonas", "Bahia", "Ceará", "Espírito Santo", "Goiás", "Maranhão", "Mato Grosso", "Mato Grosso do Sul", "Minas Gerais", "Pará", "Paraíba", "Paraná", "Pernambuco", "Piauí", "Rio de Janeiro", "Rio Grande do Norte", "Rio Grande do Sul", "Rondônia", "Roraima", "Santa Catarina", "São Paulo", "Sergipe", "Tocantins"}

fmt.Println(len(estados))
fmt.Println(cap(estados))

for i := 0; i < len(estados); i++ {
	fmt.Println(estados[i])
}

}

M3L1M avatar Feb 13 '23 23:02 M3L1M

package main

import (
	"fmt"
)

func main() {

	estados := make([]string, 26, 26)

	estados = []string{
		"Acre", "Alagoas", "Amapá", "Amazonas", "Bahia", "Ceará",
		"Espírito Santo", "Goiás", "Maranhão", "Mato Grosso",
		"Mato Grosso do Sul", "Minas Gerais", "Pará", "Paraíba",
		"Paraná", "Pernambuco", "Piauí", "Rio de Janeiro",
		"Rio Grande do Norte", "Rio Grande do Sul", "Rondônia",
		"Roraima", "Santa Catarina", "São Paulo", "Sergipe", "Tocantins"}

	for i := 0; i < len(estados); i++ {
		fmt.Println(estados[i])
	}

}

adelsonsljunior avatar May 13 '23 22:05 adelsonsljunior

package main

import "fmt"

func main() {
	estados := make([]string, 26, 26)
	valores := []string{"Acre", "Alagoas", "Amapá", "Amazonas", "Bahia", "Ceará", 
              "Espírito Santo", "Goiás", "Maranhão", "Mato Grosso", "Mato Grosso do Sul",
              "Minas Gerais", "Pará", "Paraíba", "Paraná", "Pernambuco", "Piauí", "Rio de Janeiro", 
              "Rio Grande do Norte", "Rio Grande do Sul",
	      "Rondônia", "Roraima", "Santa Catarina", "São Paulo", "Sergipe", "Tocantins"}
		
	for i, v := range valores {
		if i < len(estados) {
			estados[i] = v
		}
	}

	fmt.Println(len(estados), cap(estados))
	fmt.Println(estados[:])
}

binariarvore avatar Nov 18 '23 13:11 binariarvore

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

DominMFD avatar May 15 '24 13:05 DominMFD

// You can edit this code!
// Click here and start typing.
package main

import "fmt"

//- Crie uma slice usando make que possa conter todos os estados do Brasil.
//    - Os estados: "Acre", "Alagoas", "Amapá", "Amazonas", "Bahia", "Ceará", "Espírito Santo", "Goiás", "Maranhão", "Mato Grosso", "Mato Grosso do Sul", "Minas Gerais", "Pará", "Paraíba", "Paraná", "Pernambuco", "Piauí", "Rio de Janeiro", "Rio Grande do Norte", "Rio Grande do Sul", "Rondônia", "Roraima", "Santa Catarina", "São Paulo", "Sergipe", "Tocantins"
//- Demonstre o len e cap da slice.
//- Demonstre todos os valores da slice sem utilizar range.

func main() {
	slice := []string{"Acre", "Alagoas", "Amapá", "Amazonas", "Bahia", "Ceará", "Espírito Santo", "Goiás", "Maranhão", "Mato Grosso", "Mato Grosso do Sul", "Minas Gerais", "Pará", "Paraíba", "Paraná", "Pernambuco", "Piauí", "Rio de Janeiro", "Rio Grande do Norte", "Rio Grande do Sul", "Rondônia", "Roraima", "Santa Catarina", "São Paulo", "Sergipe", "Tocantins"}
	makeSlice := make([]string, len(slice), len(slice))
	makeSlice = []string{"Acre", "Alagoas", "Amapá", "Amazonas", "Bahia", "Ceará", "Espírito Santo", "Goiás", "Maranhão", "Mato Grosso", "Mato Grosso do Sul", "Minas Gerais", "Pará", "Paraíba", "Paraná", "Pernambuco", "Piauí", "Rio de Janeiro", "Rio Grande do Norte", "Rio Grande do Sul", "Rondônia", "Roraima", "Santa Catarina", "São Paulo", "Sergipe", "Tocantins"}

	fmt.Println(makeSlice, len(makeSlice), cap(makeSlice))

}```

thiagoCalazans-dev avatar May 18 '24 12:05 thiagoCalazans-dev