0

私は自分の質問を正しい方法で表現し、正しい用語を使用していることを願っています。私は学生の名前の配列を持っていますarrSummary、それは明確です(重複はありません)。

arrTest1次に、同じ生徒の名前とTest1でのテストスコアのリストを含む別の配列があります。次にarrTest2、Test2での名前とテストスコアのリストを含む3番目の配列があります。

arrTest1arrTest2そのようなものarrTest1[0].Name = "Bob"ですarrTest1[0].Score = "98"

、、のようarrSummaryな配列を作成するにはどうすればよいですか?arrSummary[0].Name = "Bob"arrSummary[0].Score1 = "98"arrSummary[0].Score2 = "76"

配列にはさまざまなタイプ(文字列、整数、整数)があります。

4

5 に答える 5

2
var arrSummary = arrTest1.Join(arrTest2, person => person.Name, person => person.Name
    , (first, second) => new
    {
        Name = first.Name,
        Score1 = first.Score,
        Score2 = second.Score,
    })
    .ToArray();

これは最初の2つの配列を照会し、まったく新しい配列を作成していることに注意してください。ここでは、クエリ結果に匿名型を使用しました。クエリ結果をこのメソッドの外部で使用する場合は、これら3つのプロパティを使用して新しいクラスを作成し、結果をそのタイプのインスタンスに投影します(そのタイプの後に置くだけですnew)。

配列を作成した後は、配列の寸法、タイプ、さらにはサイズを変更することはできません。サマリー配列がすでに3つのプロパティすべてを持つタイプである場合、理論的にはそれを調べて入力することができますが、サマリー配列を最初から生成する方がおそらく簡単です。そのため、ここでこれを実行しました。 。

于 2012-09-07T16:28:52.917 に答える
0
var scores1 = arrTest1.ToDictionary(score => score.Name);
var scores2 = arrTest2.ToDictionary(score => score.Name);
var output = arrSummary.Select(name=>new {Name=name, Test1 = scores1[name], Test2 = scores2[name]).ToArray();

(これは、arrTest配列に欠落しているエントリがない場合にのみ機能することに注意してください。つまり、arrSummaryにarrTest1またはarrTest2にない名前がありません。)

于 2012-09-07T16:25:23.887 に答える
0

次のように、3つの異なる配列ではなく、クラスのフィールドとしてデータを格納する単一のリストまたは配列を使用します。

class TestResult {
    public String Name;
    public Int32 TestResult1;
    public Int32 TestResult2;
}

TestResult[] testResults = new TestResult[ numberOfStudents ];
testResults[0].Name = "Mr. Foo bar";
testResults[0].TestResult1 = 65;
testResults[0].TestResult2 = 76;
于 2012-09-07T16:22:30.867 に答える
0

タイプを作成し、それを配列で使用する必要があります。

public class TestSummary {
  public string StudentName {get;set;}
  public int Score1 {get;set;}
  public int Score2 {get;set;}
}

また

あなたはこれを正しい方法で行うことができます:

public class Score{
   public int TestId {get;set;}
   public int StudentId {get;set;}
   public int Score {get;set;}
}

public class Student{
   public int ID {get;set;}
   public string FirstName {get;set;}
   public string LastName {get;set;}
   public List<Score> Scores;
}

List<Student>次に、サマリー配列の代わりに使用する必要があります。

于 2012-09-07T16:22:45.363 に答える
-1

保存するデータを含むクラスまたは構造体を作成し、それらのオブジェクトの配列を作成します。さらに良いことに、リストの使用を検討することもできます。

public class Student
{
    public string name {get;set;}
    public int score1 {get;set;}
    public int score2 {get;set;}
}

..。

List <Student> = new List<Student>();
List.Add({name="Len", score1=90, score2=100});
于 2012-09-07T16:18:48.633 に答える