2014-10-02 52 views
0

我正在從Exercism.io中進行一些編程練習,並且需要一些關於如何在小學 - 作業開始的輸入。使用列表<>,數組或其他?

作業是添加名稱和等級,並以List<string>的形式從等級索引中獲得名稱。

第一次測試的分配是這樣的:

[Test] 
public void New_school_has_an_empty_roster() 
{ 
    Assert.That(school.Roster, Has.Count.EqualTo(0)); 
} 


[Test] 
public void Adding_a_student_adds_them_to_the_roster_for_the_given_grade() 
{ 
    school.Add("Aimee", 2); 
    var expected = new List<string> { "Aimee" }; 
    Assert.That(school.Roster[2], Is.EqualTo(expected)); 
} 

我不是在尋找一個完整的解決方案,但我需要名冊上應該是什麼樣一些建議。我的想法是,名單將列出的這樣一個數組:

public List<string>[] Roster = new List<string>[]; 

這裏的問題是,它沒有通過第一次測試,因爲我要爲指定數組的長度,以便計算將永遠0. 我需要在正確的方向上推動如何解決這個問題。

+1

列表數組沒有意義,也不符合您的代碼。只需一個列表即可,刪除[]括號。 – 2014-10-02 12:58:44

+1

看起來像存儲了索引項目列表,並帶有一個鍵和一個值。 '列表'和陣列只存儲一個值。要將項與某個鍵關聯,請查看['Dictionary '](http://msdn.microsoft.com/zh-cn/library/xfhwa508(v = vs.110).aspx) – Rhumborl 2014-10-02 12:58:52

回答

1

如果grade是您的索引,那麼您應該使用Dictionary<int, List<string>>結構。 int是關鍵,在你的案例分數和列表中包含該級別的學生的名字。

當您添加成績和學生時,您會檢查該字典是否具有該等級的任何值,如果是,則獲取該值(類型爲List<string>)並將學生名稱添加到該列表中,否則創建一個新列表並添加學生姓名。

+1

我會用ILookup 。同樣的東西,但更容易在眼睛上.. – 2014-10-02 13:41:37

0

您的列表初始化是錯誤的,這就是爲什麼你得到錯誤,你必須爲陣列分配一個大小。 這是你如何做一個清單:

public List<string> Roster = new List<string>(); 

但是,在這種情況下,更好的方法是創建一個類學生或使用字典。

2

我不會使用一個列表數組,會變得困惑。閱讀面向對象編程(OOP)並查看類的用戶。

我想有一個類來表示一個人(或你的情況是學生)的財產以後,如:

public class Student 
{ 
    public string Name {get; set;} 
    public string Grade {get; set; } 
} 

並將其存儲在學生

public List<Student> Roster; 

另一種方法的簡單列表看看是字典那麼,

public Dictionary<string, string> Roster; 

其中每個條目是學生的名字和等級如此:

Roster.Add("John Mclain", "A*"); 

您還可以查看枚舉(枚舉)來存儲成績,而不是使用字符串。

+0

我同意,但它可能只是數據結構的教訓,不一定是面向對象和類,等等。 – 2014-10-02 13:03:41

+0

Thanx!我同意一個班最好,但這個練習只是數據結構。 – Andy 2014-10-02 13:16:43

+0

我用Dictionary >去了每個年級可以存儲多個名字。 – Andy 2014-10-02 13:17:49

相關問題