Pregunta

Estoy en una clase de programación básica, y todo se hace en pseudocódigo.

Mi pregunta es esta: ¿Cómo se vinculan dos matrices?

Tengo una matriz unidimensional que enumera los nombres de los estudiantes, y tengo una matriz bidimensional que enumera los ocho puntajes más altos de cada estudiante ... todo está bien, pero ahora necesito ordenar las matrices. por el nombre del alumno. Busco en línea y leo dos veces el capítulo de libros, solo menciona brevemente la vinculación de dos matrices, pero no muestra ejemplos.

Si es de alguna ayuda, estamos usando la clasificación de burbujas, y eso es con lo que estoy bastante familiarizado ... Puedo ordenar los nombres, esa es la parte fácil, pero no sé cómo ordenar las calificaciones, así que no salen de orden.

¡Gracias por el aporte!

Nota: ¡Lo tengo resuelto! Terminé haciendo lo que Greg Hewgill había mencionado. Mientras ponía mi comentario a su sugerencia, comencé a tirar líneas de código al azar hasta que esa idea me golpeó ... no se ve bonito (un módulo cambió los nombres, otro para cambiar las calificaciones, y un tercero incluso entonces intercambiar las calificaciones individuales de los estudiantes anteriormente en una matriz multidimensional), pero de hecho parecía funcionar ... no hay forma de probarlo en un idioma ya que no tengo compilador ni tengo suficiente conocimiento para convertir el pseudocódigo en código real si Tenía que descargar uno, ¡pero suena muy bien en el papel en que lo escribí!

Como también mencioné en la nota, agradezco a todos por su conocimiento rápido y útil, en realidad ni siquiera pensé que recibiría una respuesta esta noche, ¡gracias a todos nuevamente por toda su ayuda!

Jeffrey

¿Fue útil?

Solución

Lo que puede hacer es lo siguiente: a medida que ordena los nombres y tiene que intercambiar dos posiciones, haga el intercambio same en la matriz de puntajes. De esa manera, todos los cambios que realice en la matriz de nombres se reflejarán en la matriz de puntajes. Cuando haya terminado, las puntuaciones estarán en el mismo orden ordenado que los nombres.

Hay formas más efectivas de hacer esto con diferentes estructuras de datos, como lo mostrarán otros comentarios.

Otros consejos

Defina una clase simple de estudiante como esta:

public class Student : IComparable<Student>
{
    public string Name { get; set; }
    public int[] Scores { get; set; }

    #region IComparable<Student> Members

    public int CompareTo(Student other)
    {
        // Assume Name cannot be null
        return this.Name.CompareTo(other.Name);
    }

    #endregion
}

entonces aún más simple

    var students = new[] {
        new Student(){ Name = "B", Scores = new [] { 1,2,3 } },
        new Student(){ Name = "C", Scores = new [] { 3,4,5 } },
        new Student(){ Name = "A", Scores = new [] { 5,6,7 } }
    };

    Array.Sort(students);

hará el trabajo por usted.

Tu premisa es incorrecta. No deberías tener dos conjuntos en primer lugar.

Debe tener una matriz de objetos , cada uno de los cuales contiene el nombre de un estudiante y sus puntajes:

public class Record
{
    public string Student;
    public int[] Scores;
} 

Dos enfoques: primero, al ordenar los nombres, cada vez que intercambia dos nombres, intercambie las filas (o columnas o como quiera llamarlas) de puntajes en las mismas posiciones. Al final, las puntuaciones aún deben estar sincronizadas con los nombres.

Segundo, en lugar de ordenar los nombres, cree una tercera matriz que contendrá los índices en cualquiera de las otras dos matrices, inicialmente de 0 a n-1, pero luego ordenadas, comparando el nombre [a] y el nombre [b], en lugar de ordenar la matriz de nombres en sí.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top