2016-05-16 9 views
0

私はそれが私が希望のない場合、私は、任意の文字列を他の文字列が含まれているかどうかを確認したいと思い、この配列から要素を削除する方法は?

K = {「予約」、「ハンドブック」、「車」}

のような文字列配列を持っています配列Kの場合.IN配列からそれを削除するには、新しい配列がそれを使用する方が理にかなってあります

このようなK =「{」本」、 『車』}

for (i = 0; i < 10; i++) 
      { 

       if (keywords.Contains(keywords[i])) { 

         //I have no idea for this part 
       } 

      } 
+2

[通常の配列の要素を削除]可能な複製(http://stackoverflow.com/questions/457453/remove-element-of-a-regular-array) –

+0

可能な複製http://stackoverflow.com/q/8032394/3279496 – nelek

+0

データを操作する場合は、リストまたは他の構造を使用します。 –

答えて

1

する必要がありますList<>は、編集用に設計されたデータ構造ですが、配列は固定st ructure。しかし、あなたは配列を持っている、と修正された配列で終わる必要があると仮定すると、あなたが変換することができます:

IEnumerable<string> invalid_words = // ... list of words K cannot contain 
string[] K = // .. array of strings you are given 
K = K.Where(p => !invalid_words.Contains(p)).ToArray(); 
+0

実際には、Kは含めることができない単語のリストはありません。それはすべてK自体についてです。別の例を挙げます.K = {"car"、 "cars"、 "cab"}ならば、新しいKは{"car"、 "キャブ "}車は車のルートであるため –

0

これはちょっと「臭い」かもしれないが、それはあなたがしているとき、配列を変更しようとするよりはましです反復。

考えられるのは、単語が表示されているすべてのインデックスを保存してから、それらの単語を消去することです。これは最善の解決策ではありませんが、問題の解決に役立ちます。私は非常にそこにC#の上で素晴らしいですし、それが使用アレイ、あなたの配列が重複した単語を許可する場合も重複した単語が許可されていない場合にフィット

K="{"book","car"}; 
//Never use a number, try to use the .length propertie 
List<int> indexes=new List<int>();//using lists is easier than arrays 
enter code here 
for (i = 0; i < K.length; i++) 
     { 

      if (keywords.Contains(K[i])) 
      { 
        //You save the index where the word is 
        indexes.add(i); 
      } 

     } 
//Here you take those indexes and create a new Array 
int[] theNewArray=new int[K.length-indexes.Count]; 
int positionInTheNewArray=0; 
    for (i = 0; i < K.length; i++) 
     { 
     if(!indexes.Contains(i)) 
      {  theNewArray[positionInTheNewArray]=K[i]; 
        positionInTheNewArray++; 
      } 
     } 

} 

よりも、それらを使用する方が簡単ですので、あなたが「リスト」について読むことをお勧めします。

関連する問題