2012-09-07 117 views
0

我希望我用正确的方式说出我的问题,并使用正确的术语。我有一组学生姓名arrSummary,这是不同的(不重复)。如何向单维数组添加更多的“元素”或“维度”?

然后,我有另一个数组arrTest1,其中包含Test1上相同学生姓名及其考试分数的列表。然后我有第三个数组arrTest2,它包含Test2上他们的名字和测试分数的列表。

arrTest1arrTest2是这样的arrTest1[0].Name = "Bob"arrTest1[0].Score = "98"

如何制作阵列arrSummary,使得arrSummary[0].Name = "Bob"arrSummary[0].Score1 = "98"arrSummary[0].Score2 = "76"

数组中有不同的类型(字符串,整数,整数)。

+0

为什么不能有arrSummat列表的学生班呢? –

+1

您可以使用Linq Join语句来组合两个列表。 –

+0

避免匈牙利符号(例如以“arr”作为数组变量名的前缀)。 – Dai

回答

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

注意这是查询前两个数组并创建一个全新的数组。在这里,我使用匿名类型作为查询结果;如果查询结果将在此方法之外使用,则需要使用这3个属性创建一个新类,并将结果投影到该类型的实例(只需在new之后放置该类型)。

创建数组后,无法更改数组的维数,类型甚至大小。如果汇总数组已经具有所有三个属性的类型,那么理论上可以通过并填充它,但是从头开始生成汇总数组可能更容易,这就是我在这里完成的原因。

-1

创建一个包含要存储的数据的类或结构并创建这些对象的数组!更好的是,你可以考虑使用List!

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

使用一个单独的列表或阵列将数据存储为一个类字段,而不是三个不同的阵列,像这样:

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

您需要创建一个类型并将其用于您的阵列中:

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

OR

你可以做这正道:

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>,而不是你总结阵列的事。

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

+0

您需要将两个字典的值设置为“Score”属性,否则您需要从'Select'中的类型中获取'Score'属性。 (我更喜欢第一个选项)。 – Servy