Jump to content
Sign in to follow this  
jaunco325

como eliminar una posicion de una array (novato)

Recommended Posts

estoy practicando con el memopuzzle. y estoy trabado en la parte en la que tengo que iniciar el juego y repartir las fichas aleatoreamente, (no se me ocurre como hacer para que no se repitan las fichas). supongo que me falta un comando para hacer lo que dice el titulo, pero quiza estoy haciendo todo mal.

Share this post


Link to post
Share on other sites

puedes crear un nuevo array sin esa posicion y reemplazar el anterior.

puedes usar una "List" en vez de un array.

Share this post


Link to post
Share on other sites

Yo creo que tienes 2 opciones:

1. sea usas una List<Objeto> donde puedes remover el objeto mediante el RemoveAt(index).

2. sino antes de usar el array puedes reordenar el array aleatoriamente.

Share this post


Link to post
Share on other sites
12 hours ago, Igor said:

puedes crear un nuevo array sin esa posicion y reemplazar el anterior.

puedes usar una "List" en vez de un array.

lo primero se me ocurrio. pero se me hizo que era muy complicado y que tenia que haber un modo mas facil.

no sabia lo del list. se ve un poco complejo, lo probare y cualquier cosa volvere a preguntar aqui. 

11 hours ago, KevinLastra said:

Yo creo que tienes 2 opciones:

1. sea usas una List<Objeto> donde puedes remover el objeto mediante el RemoveAt(index).

2. sino antes de usar el array puedes reordenar el array aleatoriamente.

2: como se hace eso?

Share this post


Link to post
Share on other sites
32 minutes ago, jaunco325 said:

lo primero se me ocurrio. pero se me hizo que era muy complicado y que tenia que haber un modo mas facil.

es mu facil...

porejemplo si tu array se llama "miArray" y es un array de variables "string" y quieres eliminar una...

y el numero del elemento que quieres eliminar esta en una variable "int" que se llama "elementoQueQuieroEliminar"...

seria asi:

string[] nuevoArray = new string[miArray.Length-1];
//crear un array nuevo con un hueco menos que el original

for (int i=0; i<miArray.Length; i++) {
  //crear un bucle que recorre todos los elementos del array
  
  if (i < elementoQueQuieroEliminar) {
    nuevoArray[i] = miArray[i];
    //si el numero es menor pongo el mismo elemento
  }
  
  if (i > elementoQueQuieroEliminar) {
    nuevoArray[i-1] = miArray[i];
    //si es mayor pongo el elemento del original en una posicion menos
  }
  
  // y si es el mismo numero (el que quieres eliminar) pues no lo pongo
  // y asi ya esta.
  
}

miArray = nuevoArray;
//asigno el nuevo array en mi array

 

Share this post


Link to post
Share on other sites

la solucion de @Igor es la mejor para ti, pero para tu conocimiento, cuando me refiero a reordenar tu array lo puedes hacer de diferentes maneras, te escribo un ejemplo:

//myArray es el array de las fichas
int RandIndexs = new int[myArray.Lenght];
int index, i = 0;
while(i < myArray.Lenght)
{
  index = Random.range(0, myArray.Lenght);
  for(int j = i-1; j >= 0; j--)
  {
    if(index == RandIndexs[j])
    {
      index = -1;
      break;
    }
  }
  if(index != -1)
  {
    RandIndexs[i] = index;
    i++;
  }
}

lo que hice es crear un array aparte que contiene las posiciones aleatorias para las fichas, para comprenderlo mejor incluye unos debugs y has unos tests.

sino aqui te incluyo una version diferente del codigo de @Igor hace las misma cosa, solo que esta hecho con un while y tiene un solo if.

string newArray = new String[myArray.Lenght-1];
int i = 0, j = 0;
while(i < myArray.Lenght-1)
{
  if(i != index_elemento_que_quiero_eliminar)
  {
    newArray[j] = myArray[i];
    j++;
  }	
  i++;
}
myArray = newArray;

 

Share this post


Link to post
Share on other sites
On 8/18/2020 at 6:52 PM, Igor said:

es mu facil...

porejemplo si tu array se llama "miArray" y es un array de variables "string" y quieres eliminar una...

y el numero del elemento que quieres eliminar esta en una variable "int" que se llama "elementoQueQuieroEliminar"...

seria asi:


string[] nuevoArray = new string[miArray.Length-1];
//crear un array nuevo con un hueco menos que el original

for (int i=0; i<miArray.Length; i++) {
  //crear un bucle que recorre todos los elementos del array
  
  if (i < elementoQueQuieroEliminar) {
    nuevoArray[i] = miArray[i];
    //si el numero es menor pongo el mismo elemento
  }
  
  if (i > elementoQueQuieroEliminar) {
    nuevoArray[i-1] = miArray[i];
    //si es mayor pongo el elemento del original en una posicion menos
  }
  
  // y si es el mismo numero (el que quieres eliminar) pues no lo pongo
  // y asi ya esta.
  
}

miArray = nuevoArray;
//asigno el nuevo array en mi array

 

tenes razon es mas facil de lo que parece. gracias

 

12 hours ago, KevinLastra said:

la solucion de @Igor es la mejor para ti, pero para tu conocimiento, cuando me refiero a reordenar tu array lo puedes hacer de diferentes maneras, te escribo un ejemplo:


//myArray es el array de las fichas
int RandIndexs = new int[myArray.Lenght];
int index, i = 0;
while(i < myArray.Lenght)
{
  index = Random.range(0, myArray.Lenght);
  for(int j = i-1; j >= 0; j--)
  {
    if(index == RandIndexs[j])
    {
      index = -1;
      break;
    }
  }
  if(index != -1)
  {
    RandIndexs[i] = index;
    i++;
  }
}

lo que hice es crear un array aparte que contiene las posiciones aleatorias para las fichas, para comprenderlo mejor incluye unos debugs y has unos tests.

sino aqui te incluyo una version diferente del codigo de @Igor hace las misma cosa, solo que esta hecho con un while y tiene un solo if.


string newArray = new String[myArray.Lenght-1];
int i = 0, j = 0;
while(i < myArray.Lenght-1)
{
  if(i != index_elemento_que_quiero_eliminar)
  {
    newArray[j] = myArray[i];
    j++;
  }	
  i++;
}
myArray = newArray;

 

gracias tambien.

Share this post


Link to post
Share on other sites

Este código lo hicimos en otro post. Pásale una List de elementos y te los posicionará de manera aleatoria:

public void shuffle<T>(IList<T> list) {
  System.Random random = new System.Random();

  int n = list.Count;
  for (int i = list.Count - 1; i > 1; i--) {
    int rnd = random.Next(i + 1);

    T value = list[rnd];
    list[rnd] = list[i];
    list[i] = value;
  }
}

 

  • Like 3

Share this post


Link to post
Share on other sites
Sign in to follow this  

UnitySpain © Todos los derechos reservados 2020
×
×
  • Create New...