2011-12-28 20 views
4

私はちょうどポイントに行くでしょう。私は配列内のアイテムを一様な差異で移動したいと思います。私はこれを持っているとしましょう。アレイから1つのアイテムを削除し、他のアイテムを後ろに移動

string[] fruits = { "Banana", "Apple", "Watermelon", "Pear", "Mango" }; 

たとえば、「Apple」を削除したいとしましょう。

fruits[1] = ""; 

は今、すべての残っているもの:

{ "Banana", "", "Watermelon", "Pear", "Mango" } 

するにはどうすればよい私は本当にアップルの一部を除去し、取得のみ

{ "Banana", "Watermelon", "Pear", "Mango" } 

注意をそのすべての項目のインデックスからアレイの終わりが後方に1移動するまで「スイカ」。何か案は?

+3

@Morten:ArrayListのような非ジェネリックコンテナを使用しないでください。代わりに汎用リスト ''リスト 'を使用してください! – abatishchev

+0

問題は、これはチームワークプロジェクトです。私の友人はプロジェクトを開始し、配列を使用しました。アプリケーションをリストを使用するように変更するだけでは、プロジェクトを再起動できません。 –

+0

@MortenAnderson実際には、ArrayListを使用する必要はありません(.NET 1を使用している場合を除く)。 – Ray

答えて

6

あなたが本当に配列を使用したい場合は、あなたがあなたのリストをフィルタリングして配列に変換するためにLINQを使用することができます:

string[] fruits = { "Banana", "Apple", "Watermelon", "Pear", "Mango" }; 

    fruits = fruits.Where(f => f != "Apple").ToArray(); 

あなたは、配列を使用する必要がない場合は、List classを見てください。リストを追加したり削除したりすることができます。あなたがアイテムインデックスではなく、項目の値によって削除する場合はWouterの答えと同様に

+0

恐ろしい 'Wouter de Kort' – Dotnet

+0

これは" Apple "のすべてを取り除きます – Moonlight

+0

私はアイテムごとに1つしか含まないので、これを試してみます。 –

9

Listクラスはあなたのためのものです。次の要素を自動的に後方に移動するメソッドRemoveを提供します。

+0

私のチームは配列をリストに変更できるようにしました。私はこれを使用します。 –

2

、あなたが行うことができます:

for(int i = 1; i + 1 < fruits.Length; i++) 
    fruits[i] = fruits[i + 1]; 
fruits = System.Array.Resize(fruits, fruits.Length - 1); 

そうした場合:

fruits = fruits.Where((s, i) => i != 1).ToArray(); 
1

あなたはこのような何かを行うことができます配列内の果実の順序を気にする必要はありませんが、よりスマートな方法は次のとおりです。

fruits[1] = fruits[fruits.Length - 1]; 
fruits = System.Array.Resize(fruits, fruits.Length - 1); 
+0

私はそれを知っています....実際に私のプログラムは、好きな果物のピッカーです。私は果物が無限であることを知っているので、別の配列があります。 フルーツは実際に私のアプリでフルーツの略です。 –

+0

C::=あなたが知っていることは、私が30年前に英語を習っていたとき、それは無限であることを学びました。しかし、今私は間違ったことを言っていないことを確認するためにそれを見て、dictionary.comは複数が果物だと言います。だから私はこれがアメリカのイディオムであるかどうかは分かりません。だから、私は答えからその部分を削除しました。 –

+0

@Naufal:あなたは間違いなく 'List 'を使う必要があります! – abatishchev

1

私は、新しいプログラマーができる最も有用なことの一つは、さまざまなコレクションの種類を研究し理解することだと思います。

他の人が言及しているリストオプションはおそらくあなたが探しているものだと思っていますが、多くの挿入や削除を行い、多くのインデックスを参照していない場合はLinkedListクラスを調べる価値があります。

0

これは、リストと配列を使用して配列から項目を削除する方法の例です。注意linqを使用して、削除する悪名のアレイを検索する方法も示します。これが誰かを助けることを望みます。

public static void CheckBadNames(ref string[] parts) 
    { 
     string[] BadName = new string[] {"LIFE", "ESTATE" ,"(",")","-","*","AN","LIFETIME","INTREST","MARRIED", 
             "UNMARRIED","MARRIED/UNMARRIED","SINGLE","W/","/W","THE","ET", 
             "ALS","AS", "TENANT" }; 

     List<string> list = new List<string>(BadName); //convert array to list 

     foreach(string part in list) 
     { 
      if (BadName.Any(s => part.ToUpper().Contains(s))) 
      { 
       list.Remove(part); 
      } 
     } 

     parts = list.ToArray(); // convert list back to array 
    } 
関連する問題