Visitante!
Faça seu Login ou Registre-se!

Galeria de Jogos

[Ruby] Aula[6] = Arrays 3 Respostas | 2204 Visualizações

0 Membros e 1 Visitante estão vendo este tópico.

Raizen

  • *
  • Mensagens: 2476 Ouro: 1838

    Vencedor CRM Awards - Melhor Scripter Vencedores das edições do Concurso Projeto Rickas!

    • Ver perfil
    • E-mail
[Ruby] Aula[6] = Arrays
Online: 02 Dez 2012, 14:30
Índice das aulas básicas
Índice das aulas avançadas
Índice das aulas de algoritmos
Mega Aula de Arrays

Introdução

Arrays, uma das ferramentas mais uteis e utilizadas pelos programadores, por sua facilidade, rapidez, é uma ferramenta poderosíssima.
  As arrays são basicamente vetores e comparados a tal, a razão disso é porque arrays são um conjunto de valores. Basicamente as arrays criam espaços em que podem ser preenchidos por valores de variáveis no caso todas aquelas já aprendidas, Integer, Float, String...

Fiz uma imagem bem malfeita no paint xD, mas será possível entender melhor o que acontece.

Se eu criar uma array com 5 espaços, no caso 5 valores, no Ruby podendo fazer da seguinte maneira.

Código: [Selecionar]
minharray = Array.new(5)Eu teria esse caso
5 espaços em branco, todos com o valor nil, que seria nulo.
No caso eu posso manipular os "espaços" criados pelas arrays, exatamente do mesmo modo que manipulo as variáveis, no caso se eu quiser que o terceiro "espaço" tenha o valor 7, eu poderia simplesmente fazer o seguinte.

Código: [Selecionar]
minhaarray[2] = 7 # Lembrando que começa do 0 a contagem.Que deixaria o mostrado anterior assim.

  As arrays são um recurso muito especial, diferente de declarar diferentes variáveis, declarando elas como array, é possível aumentar a interatividade entre eles, organiza-los e encontra-los mais facilmente, também possibilitando criar laços de repetição para facilitar e optimizar o código.

   Utilizando 2 vetores, basicamente 2 arrays é possível também criar uma matriz,como podem ver na foto seguinte(esse imaginei que ficaria muito mal feito no paint, então peguei a primeira imagem do google :).


Para quem percebeu, as arrays vão além de simples valores, e devem ser visualizadas como algo que sai de apenas um valor, para algo que pode ir de simples linhas, para mapas completos aonde eu posso encontrar facilmente cada valor nas arrays, e manipula-las entre si.

  Certo, chega de teoria, vamos a parte pratica!


Arrays

  Para se declarar uma variável como array no Ruby
Código: [Selecionar]
variavel = Array.newou
Código: [Selecionar]
variavel = []Nesses 2 casos, é declarado uma array com valor em branco, ou seja ele já é visto como uma array, porém não tem índice nem valores embutidos nele.

Código: [Selecionar]
variavel = Array.new(n)Nesse caso é declarado uma array com tamanho n, e todos os valores dentro dessa array tem valor nil, exemplo:
Código: [Selecionar]
variavel = Array.new(3)Será criado a seguinte array
Código: [Selecionar]
[nil, nil, nil]
Também é possível facilmente preencher toda a nova array com um dado valor, por exemplo.
Código: [Selecionar]
variavel = Array.new(4, "a")Será criado a seguinte array
Código: [Selecionar]
["a", "a", "a", "a"]
A array também permite ser criado os valores dentro de um laço, ou seja caso eu pretenda criar uma array que tenha seus valores diretamente ligado a seu índice(índice é a posição dos valores dentro de uma array, sendo que o primeiro valor tem índice 0, o segundo tem índice 1, e assim por diante)
Código: [Selecionar]
variavel = Array.new(4) {|a| a *= 2}Esse laço por exemplo criaria uma array com tamanho 4, e que seus valores internos sejam 2 vezes o valor de seu índice, o código acima criaria essa array.
Código: [Selecionar]
[0, 2, 4, 6]
Caso eu declare um índice fora da Array com algum valor, todos os espaços entre o último índice e o índice que eu criei serão automaticamente preenchidos por nil, exemplo com a array acima.
Código: [Selecionar]
variavel[6] = 3deixaria a array da seguinte maneira
Código: [Selecionar]
[0, 2, 4, 6, nil, nil, 3]

Manipulando as arrays

Essa é a parte que é interessante sobre as arrays, o modo como podem ser facilmente manipulados e a interligação entre os valores dentro de uma array.
Você pode facilmente criar laços para criar e manipular valores em uma array, exemplo:

Código: [Selecionar]
minhaarray = Array.new
for n in 0...5
minhaarray[n] = n * n
end
Que criaria uma array da seguinte maneira
Código: [Selecionar]
[0, 1, 4, 9, 16]Existem milhares de modos de colocar e criar arrays com laços diferentes.
Intersecção e união
Intersecção são os valores idênticos contidos em todas as arrays, exemplo:
Código: [Selecionar]
[1, 4, 5, 6] & [2, 4, 7] == [4]
União são os valores contidos em todas as arrays, exemplo:
Código: [Selecionar]
[1, 4, 5, 6] | [2, 4, 7] == [1, 4, 5, 6, 2, 7]
Operações matemáticas
Adição:
Código: [Selecionar]
[1, 2, 4, 5] + [2, 4, 6] == [1, 2, 4, 5, 2, 4, 6]Subtração:
Código: [Selecionar]
[1, 2, 4, 4, 4, 5] - [4, 1] == [2, 5]Multiplicação:
Código: [Selecionar]
[1, 2, 3] * 2 == [1, 2, 3, 1, 2, 3]Igualdade:
Código: [Selecionar]
[1, 2, 3, 3] == [2, 1, 3, 3] # false
Código: [Selecionar]
[1, 2, 3] == [1, 2, 3] # true
Retorno de valores
Size:
array.size ou array.length retorna q quantidade de índices ou tamanho da array.
Código: [Selecionar]
[1, 2, 3, 4].size == 4
[1, 2, 3, 4].length == 4

Count:
pode ser usado como o size/length
array.count
Código: [Selecionar]
[1, 2, 3, 4].count == 4pode ser usado para contar certos valores em uma array
array.count(n)
Código: [Selecionar]
[1, 2, 2, 4].count(2) == 2pode ser usado com estruturas condicionais
array.count{|n| condição} aonde n é o índice
Código: [Selecionar]
[1, 2, 2, 3].count{|n| n >= 2} == 3
Index:
array.index(n) retorna a posição daquele valor dentro da array
Código: [Selecionar]
[1, 2, 3, 4].index(4) == 3array.index{|n| block} retorna a posição daquele valor dentro da array de acordo com o bloco condicional.
Código: [Selecionar]
[1, 2, 3, 4].index{|n| n > 1} == 1Reparem que ele retorna o primeiro valor que atinge a condição.

First e Last:
array.first retorna o primeiro objeto da array
Código: [Selecionar]
[1, 2, 3, 4].first == 1array.last retorna o último objeto da array
Código: [Selecionar]
[1, 2, 3, 4].last == 4
Include:
array.include?(n) verifica se o objeto n está incluso na array.
Código: [Selecionar]
[1, 2, 3, 4].include?(2) == true
[1, 2, 3, 4].include?(5) == false

empty:
retorna true se a array estiver vazia.
Código: [Selecionar]
[].empty == true
[1].empty == false

rindex:
mesma coisa que o index, mas ao invés de retornar o primeiro valor igual, retorna o último.
array.rindex(n)
Código: [Selecionar]
[1, 2, 2, 2, 3].rindex(2) == 3
Manipulando a Array
Importante sobre as arrays, é de costume que os comandos utilizados nas arrays que terminam com exclamação "!", mudam a array permanentemente, então comandos que tem o mesmo nome porém um sem e outro com exclamação, pode-se deduzir que o sem exclamação retorna o valor, porém não modifica a array e o com modifica a array para o novo valor.
push:
Empurra um valor no último índice da array
Código: [Selecionar]
[1, 2, 3, 4].push(5) == [1, 2, 3, 4, 5]Também pode ser escrito da seguinte maneira
Código: [Selecionar]
[1, 2, 3, 4] << 5 == [1, 2, 3, 4, 5]
rotate e rotate!:
rotaciona a array, podendo ser positivo ou negativo, lembrando do que foi dito anteriormente sobre a exclamação.
Código: [Selecionar]
[1, 2, 3, 4].rotate(1) == [4, 1, 2, 3] # porém a array continua com [1, 2, 3, 4] e retorna o novo valor
[1, 2, 3, 4].rotate!(- 2) == [3, 4, 1, 2] # porém a array antiga terá o novo valor

reverse e reverse!:
reposiciona os valores da array no sentido contrário
Código: [Selecionar]
[1, 2, 3, 4].reverse == [4, 3, 2, 1] # porém a array continua com [1, 2, 3, 4] e retorna o novo valor
[1, 2, 3, 4].reverse! == [4, 3, 2, 1] # porém a array antiga terá o novo valor

delete:
retorna se tem tal valor e o deleta da array.
Código: [Selecionar]
a = [1, 2, 3, 4]
a.delete(4) # retorna 4
a.delete(5) # retorna nil
a == [1, 2, 3]

shift:
muito semelhante ao delete, porém ao invés dos valores, ele é pego o primeiro valor da array
Código: [Selecionar]
a = [1, 2, 3, 4]
a.shift # retorna 1
a == [2, 3, 4]
ou então n primeiros valores
Código: [Selecionar]
a = [1, 2, 3, 4]
a.shift(2) # retorna 1, 2
a == [3, 4]

shuffle e shuffle!:
randomiza as posições dos objetos em uma array
Código: [Selecionar]
[1, 2, 3, 4].shuffle == [3, 2, 4, 1] # porém a array continua com [1, 2, 3, 4] e retorna o novo valor
[1, 2, 3, 4].shuffle! == [4, 1, 3, 2] # porém a array antiga terá o novo valor

sort e sort!:
reposiciona os valores da array em ordem crescente, ordem númerica para float/integer e ordem alfabética para strings
Código: [Selecionar]
["c", "a", "d"].sort == ["a", "c", "d"] # porém a array continua com ["c", "a", "d"] e retorna o novo valor
[4, 3, 1, 2].sort! == [1, 2, 3, 4] # porém a array antiga terá o novo valor

take:
retorna os primeiros n valores da array.
Código: [Selecionar]
["c", "a", "d"].take(2) == ["c", "a"]
unshift:
semelhante ao push, porém ele empurra objetos ns primeiras posições, e reorganiza os seguintes objetos para que o novo tome seu lugar.
Código: [Selecionar]
[1, 2, 3, 4, 5].unshift(0) == [0, 1, 2, 3, 4, 5]
fill:
preenche a array de tamanho n com um dado valor
Código: [Selecionar]
[1, 2, 3, 4, 5].fill(0) == [0, 0, 0, 0, 0]ou com um bloco
Código: [Selecionar]
[1, 2, 3, 4, 5].fill{|n| n * n} == [0, 1, 4, 9, 16]
compact e compact!:
retira os valores nil de uma array
Código: [Selecionar]
[1, nil, nil, 2, 3, 4].compact == [1, 2, 3, 4] # porém a array continua com [1, nil, nil, 2, 3, 4] e retorna o novo valor
[1, nil, nil, 2, 3, 4].compact! == [1, 2, 3, 4] # porém a array antiga terá o novo valor

Considerações finais
Os comandos aqui escritos sobre as arrays são apenas uma parte, tentei escrever os principais e mais utilizados, Aqui tem uma lista mais completa dos métodos, e é aonde eu uso como colinha para me lembrar dos que eu esqueço ou não conheço (também utilizado para poder montar essa aula).
http://www.ruby-doc.org/core-1.9.3/Array.html

Boa sorte nos estudos :D
« Última modificação: 16 Dez 2015, 10:33 por Raizen »

Akugam

  • *
  • Mensagens: 29 Ouro: 9
  • "Meu lugar é no topo"
    • RPG Maker VX/Ace
    • Ver perfil
    • E-mail
[Ruby] Aula[6] = Arrays
Resposta 1 Online: 12 Jan 2017, 16:01
Tive bastante dificuldade pra entender sobre as arrays, mas acho que deu pra pegar, mas tenho duas duvidas:

na ultimas aulas, varias vezes eu via colocarem a class dentro de uma variável e então usando essa variável para chamar um metodo:
Código: [Selecionar]
class Classe
  def metodo
  end
end

variavel = Classe.new
variavel.metodo
essa penúltima linha do código seria a criação de uma array contendo a class como valor?

e sobre o laço:

Código: [Selecionar]
variavel = Array.new(4) {|a| a *= 2}
O fato do a estar dentro dos || significa que a = índice?

Creio que sejam minha únicas duvidas por enquanto em relação as arrays.
YO :3

Nandikki

  • *
  • Mensagens: 1378 Ouro: 635

    Participantes do Maps Together 2

  • Run!
    • RPG Maker MV
    • Ver perfil
  • NightWalker
[Ruby] Aula[6] = Arrays
Resposta 2 Online: 12 Jan 2017, 17:05
Tive bastante dificuldade pra entender sobre as arrays, mas acho que deu pra pegar, mas tenho duas duvidas:

na ultimas aulas, varias vezes eu via colocarem a class dentro de uma variável e então usando essa variável para chamar um metodo:
Código: [Selecionar]
class Classe
  def metodo
  end
end

variavel = Classe.new
variavel.metodo
essa penúltima linha do código seria a criação de uma array contendo a class como valor?

Eu não sei Ruby, mas estudo Java, então acho que posso explicar:

Não, não é. A penúltima linha é a criação de um objeto da class Classe. É uma variável de referência. Não é uma array.

Raizen

  • *
  • Mensagens: 2476 Ouro: 1838

    Vencedor CRM Awards - Melhor Scripter Vencedores das edições do Concurso Projeto Rickas!

    • Ver perfil
    • E-mail
[Ruby] Aula[6] = Arrays
Resposta 3 Online: 12 Jan 2017, 18:47
Opa é o que o Nandikki falou  :ok:

Só complementando, isso tem a ver com as estruturas de objetos que o Ruby usa que é comum em praticamente todas linguagens orientadas a objetos.
Dou uma explicada bem por cima nas aulas mais avançadas,
http://centrorpg.com/index.php?topic=6630.0
porém saber como funciona é necessário um estudo maior sobre programação, então de momento essa aula acima já vai ajudar a entender melhor.

 

Versão Mobile