2016-08-24 21 views
-4

リスト内のアイテムを年齢順に昇順に並べ替える必要があるため、どのようにすればよいか分かりません。これまでのコードです: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

私たちはコードを書くつもりはありません。これはコード作成サービスではありません。なぜあなたはGoogleの "ソートアルゴリズム"を選んでお好みのものを選んでください。 –

+0

* Linq * 'OrderBy'を見てください –

+0

私はそれについて考えている間にこのコードを短縮するためにできることの1つ:コレクションイニシャライザ構文を使うことができます: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)であり、リストから暗黙の変換はありません。したがって、私が提供したコードでToListを省略すると、コンパイルされません。さらに、LINQは遅延/遅延評価を大量に使用するため、何らかの方法でリストを反復するまではクエリは実行されません。 https://msdn.microsoft.com/en-us/library/bb534966(v=vs.110).aspx – EJoshuaS

+0

@ EJoshuaS私の全体的なポイントは、gambleListは既にリストであるということです。それで、なぜそのリストを再度割り当てる必要があるのですか?並べ替えることができ、割り当てる必要はありません。あなたの答えが正しいとは決して言わなかった。 – Ripon

1

私はLinqを探すことをお勧めします。ちょうどそれをgoogleするだけです。

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

申し訳ありません。 –

関連する問題