1

我在一个基本的编程课上,一切都是用伪代码完成的。

我的问题是:如何链接两个数组?

我有一个列出学生姓名的一维数组,我有一个列出每个学生的前八名分数的二维数组……这一切都很好,但现在我需要按学生对数组进行排序姓名。我在网上闲逛并通读了书籍章节两次,它只简要提到了链接两个数组,但没有显示示例。

如果有任何帮助,我们正在使用冒泡排序,这是我相当熟悉的......我可以对名称进行排序,这很容易,但我不知道如何对成绩进行排序,所以他们不会出故障。

感谢您的输入!

旁注:我明白了!我最终按照 Greg Hewgill 提到的方式做了。当我对他的建议发表评论时,我开始随机输入代码行,直到我想到这个想法......它看起来并不漂亮(一个模块交换了名称,另一个交换了成绩,甚至还有第三个在多维数组中交换个别学生的成绩),但它确实似乎工作......没有办法用一种语言测试它,因为我没有编译器,也没有足够的知识将伪代码变成实际代码,如果我要下载一个,但在我打出来的纸上听起来真的很棒!

正如我在笔记中提到的,我非常感谢大家的快速和有益的洞察力,我什至没想到今晚我会得到回复,再次感谢大家的帮助!

杰弗里

4

4 回答 4

2

像这样定义一个简单的 Student 类:

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
}

然后更简单

    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);

将为您完成工作。

于 2008-12-02T08:40:38.643 回答
1

您可能想要做的是:当您对名称进行排序并且必须交换两个位置时,请在分数数组中进行相同的交换。这样,您对名称数组所做的所有更改都将反映在分数数组中。完成后,分数将按照与名称相同的排序顺序。

正如其他评论将显示的那样,有更有效的方法可以使用不同的数据结构来做到这一点。

于 2008-12-02T08:12:39.077 回答
0

你的前提是错误的。首先,您不应该有两个数组。

您应该有一个对象数组,每个对象都包含一个学生的姓名和他的分数:

public class Record
{
    public string Student;
    public int[] Scores;
} 
于 2008-12-02T08:08:15.513 回答
0

两种方法:首先,在对名称进行排序时,每次交换两个名称时,交换相同位置的分数的行(或列或任何您想称呼的名称)。最后,分数仍应与名称保持同步。

其次,不是对名称进行排序,而是创建第三个数组,该数组将包含其他两个数组中的任何一个的索引,最初为 0 到 n-1,但随后排序,比较 name[a] 和 name[b],而不是排序名称数组本身。

于 2008-12-02T08:18:06.397 回答