2016-08-24 29 views
-4

我需要使用foreach按升序對列表中的項目按年齡進行排序,因此我不知道如何進行排序。這是我的代碼到目前爲止:如何使用foreach對列表中的項目進行排序C#

namespace ListProject 
{ 
    public struct FamilyMem 
    { 
     public string name; 
     public int age; 

     public FamilyMem(string name,int age) 
     { 
      this.name = name; 
      this.age = age; 
     } 
    } 

    class Program 
    { 
     static void Main(string[] args) 
     { 
      FamilyMem Jack = new FamilyMem("Jack", 15); 
      FamilyMem Tom = new FamilyMem("Tommy", 24); 
      FamilyMem Felix = new FamilyMem("Felix", 26); 
      FamilyMem Lukas = new FamilyMem("Lukas", 26); 
      FamilyMem Austin = new FamilyMem("Austin", 54); 
      FamilyMem Ben = new FamilyMem("Ben", 55); 

      List<FamilyMem> gambleList = new List<FamilyMem>(); 

      gambleList.Add(Jack); 
      gambleList.Add(Tom); 
      gambleList.Add(Felix); 
      gambleList.Add(Lukas); 
      gambleList.Add(Austin); 
      gambleList.Add(Ben); 

      Console.WriteLine(gambleList.Count.ToString()); 


     } 
    } 
} 

我還需要一個單獨的代碼片段,這將允許我按字母順序排序名稱。謝謝。

+4

嗯,我們不打算爲你寫代碼。這不是一個代碼寫入服務。你爲什麼不穀歌「排序算法」,並選擇你最喜歡的一個。 –

+0

看看* Linq *'OrderBy' –

+0

你可以使用collection初始值設定語法來縮短這段代碼:https://msdn.microsoft.com/en-us/庫/ bb384062.aspx – EJoshuaS

回答

1

你可以在用foreach循環遍歷它時不會編輯集合,所以至少這是不可能的。但是,您可以使用LINQ或某些for循環。使用類似:

gambleList = gambleList.OrderBy(item => item.name).ToList(); 

的原因轉讓,順便說一下,就是排序依據操作(不像,例如Sort()方法)不排序到位集合 - 它返回一個引用分類收集。

你也可以使用標準的循環或遞歸函數來實現類似於插入排序的東西。

+0

我們不需要再次使用.ToList()。由於它已經是一個列表。 只需'gambleList.OrderBy(x => x.age);'很好。 – Ripon

+0

@Ripon不正確。 OrderBy的實際返回類型是System.Linq.IOrderedEnumerable (* not * list),並且沒有從那個到List的隱式轉換;因此,如果您在我提供的代碼中省略了ToList,它甚至不會編譯。此外,LINQ大量使用延遲/懶惰評估,因此在您以某種方式遍歷列表之前,甚至不會發生查詢。見https://msdn.microsoft.com/en-us/library/bb534966(v=vs.110).aspx – EJoshuaS

+0

@ EJoshuaS我的觀點是gambleList已經是一個列表。那麼,爲什麼我們需要再次分配這個列表。我們只是可以排序,我們不需要將其分配。我從來沒有說過你的回答不正確。 – Ripon

1

我建議你去找Linq。只需簡單地谷歌它。 如下爲此,您可以使用排序依據:

gambleList = gambleList.OrderBy(x => x.age).ToList(); 
+0

你必須做「gambleList = gambleList.OrderBy(item => item.name).ToList();」因爲OrderBy不會對列表進行排序;此代碼將保持gambleList不變。 OP也想按字母順序排序,所以他想按名稱排序而不是按年齡排序。 – EJoshuaS

+0

它可以從item.name改爲item.age,具體取決於我如何對它們進行排序 – Rambo

0

我建議你考慮看看一些IEnumerable的方法(https://msdn.microsoft.com/en-us//library/bb534966(v=vs.110).aspx)和一些例子:http://www.dotnetperls.com/sort

例子:

Pet[] pets = { new Pet { Name="Barley", Age=8 }, 
       new Pet { Name="Boots", Age=4 }, 
       new Pet { Name="Whiskers", Age=1 } }; 

IEnumerable<Pet> query = pets.OrderBy(pet => pet.Age); 

foreach (Pet pet in query) 
{ 
    Console.WriteLine("{0} - {1}", pet.Name, pet.Age); 
} 
+1

如果您不能發表評論,請不要嘗試對評論進行評論。應該爲實際答案保留答案,而不是繞過系統。 – mason

+0

好的。對於那個很抱歉。 –

相關問題