我希望我能以正确的方式措辞我的问题,并使用正确的术语。我有一系列学生姓名arrSummary
,它们是截然不同的(没有重复)。
然后,我有另一个数组arrTest1
,其中包含相同学生姓名的列表以及他们在Test1上的考试成绩。然后我有第三个数组arrTest2
,其中包含他们的名字列表以及他们在Test2上的测试分数。
arrTest1
和arrTest2
是arrTest1[0].Name = "Bob"
和arrTest1[0].Score = "98"
。
如何制作数组arrSummary
,以便arrSummary[0].Name = "Bob"
,arrSummary[0].Score1 = "98"
,arrSummary[0].Score2 = "76"
?
数组中有不同的类型(字符串,整数,整数)。
答案 0 :(得分: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 :(得分: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;
答案 2 :(得分: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>
而不是你的汇总数组。
答案 3 :(得分: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中的名字。)
答案 4 :(得分:-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});