1

私は基本的なプログラミングのクラスに参加しており、すべてが疑似コードで行われています。

私の質問はこれです: 2 つのアレイをどのようにリンクしますか?

生徒の名前をリストする 1 次元配列と、各生徒の上位 8 点をリストする 2 次元配列があります...これはすべて問題ありませんが、今度は配列を生徒別に並べ替える必要があります。名前。私はオンラインで突っ込んで、本の章を2回読んでいます.2つのアレイのリンクについて簡単に言及しているだけで、例は示していません。

それが助けになるなら、私たちはバブルソートを使用しています。それは私がかなり慣れているものです...名前をソートすることはできます。それは簡単な部分ですが、グレードをソートする方法がわからないので、乱れる。

入力していただきありがとうございます!

追記:わかった!私はグレッグ・ヒューギルが言ったようにやった。彼の提案にコメントを入れたとき、そのアイデアが思いつくまでコード行をランダムに挿入し始めました...見栄えがよくありません (1 つのモジュールは名前を交換し、別のモジュールはグレードを交換し、さらに 3 つ目はその後も交換しました)。個々の学生の成績を多次元配列で以前に交換する)が、実際には機能しているように見えました...コンパイラがなく、疑似コードを実際のコードにする十分な知識がないため、言語でテストする方法はありませんダウンロードする予定だったのですが、タイプした紙にとても良さそうです!

メモでも述べたように、皆さんの迅速で有益な洞察に感謝します。実際、今夜返信が来るとは思っていませんでした。皆さんの助けにもう一度感謝します!

ジェフリー

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

やりたいことは次のとおりです。名前を並べ替えているときに 2 つの位置を交換する必要があるため、スコアの配列で同じ交換を行います。そうすることで、名前配列に加えたすべての変更がスコア配列に反映されます。完了すると、スコアは名前と同じ順序でソートされます。

他のコメントが示すように、さまざまなデータ構造でこれを行うより効果的な方法があります。

于 2008-12-02T08:12:39.077 に答える
0

あなたの前提は間違っています。そもそも2つの配列を持つべきではありません。

オブジェクトの 1 つの配列が必要で、それぞれが生徒の名前と得点を保持します。

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

2 つのアプローチ: 最初に、名前を並べ替えるとき、2 つの名前を交換するたびに、同じ位置にあるスコアの行 (または列または任意の名前) を交換します。最後に、スコアはまだ名前と同期している必要があります。

次に、名前を並べ替える代わりに、他の 2 つの配列のいずれかへのインデックスを含む 3 番目の配列を作成します。最初は 0 から n-1 ですが、並べ替える代わりに名前 [a] と名前 [b] を比較して並べ替えます。名前配列自体。

于 2008-12-02T08:18:06.397 に答える