2016-06-21 16 views
0

cは多次元文字列配列内の項目を削除します。I [3] [] <p> </p>以下の文字列[] []データ=新しい文字列として多次元文字列配列を有する#

I [0] [1]、データ[1] [1]とデータ[2] [1]、これはデータを削除する

data[0] 
    [0] "EUG5" string 
    [1] "FA1" string 

data[1] 
    [0] "9.000000" string 
    [1] "1000" string 

data[2] 
    [0] "1" string 
    [1] "0" string 

以下のような文字列配列内のアイテムデータ[2]上の条件に基づいて、 "0"となる。これは可能ですか?

+1

「の削除項目は、」アレイでは不可能です。ヌル値またはその他の値を割り当てることができます。場所は決して消えません。リストを代わりに使用してください。 – Tommy

+0

以下の回答の1つが役に立った場合は、こちらを参照してください:http://stackoverflow.com/help/someone-answers – JustSomeDude

答えて

2

Array.Resizeを使用して、やりたいことをすることができます。

var data = new string[][]{new []{"EUG5","FA1"},new []{"9.000000","1000"},new []{"1","0"}}; 

data.Dump(); 

Array.Resize(ref data[0],1); 
Array.Resize(ref data[1],1); 
Array.Resize(ref data[2],1); 

data.Dump(); 

それは、この生成します:

enter image description here

ます。また、周りの要素を移動するためにArray.Copyを使用することができますので、これはより一般的なケースである:

var data = new string[][]{new []{"EUG5","FA1"},new []{"9.000000","1000"},new []{"1","0"}}; 

data.Dump(); 

var colToDelete = 0; 

for (int i = 0; i < data.Length; i++) 
{ 
    Array.Copy(data[i],colToDelete+1,data[i],colToDelete,data[i].Length-colToDelete-1); 
    Array.Resize(ref data[i],data[i].Length-1); 
} 

data.Dump(); 

このLINQpadスクリプトを試してみてください他のポスターが正しく表示されているように、の方法で簡単にList

1

C#の配列オブジェクトから要素を削除することはできません。すべての配列は変更できません。あなたが探している柔軟性を得るには、Listオブジェクトを使用します。

何らかの理由でスタックがあり、配列を使用する必要がある場合は、配列を受け取り、配列を返すメソッドを作成できます。クーゼの

public string[][] RemoveElement(string[][] array, int coordinateA, int coordinateB) 
{ 
    var ListOfItems = new List<List<string>>(); 

    foreach(string[] item in array) 
     ListOfItems.add(new List<string>(item)); 

    ListOfItems[coordinateA].RemoveAt(coordinateB); 

    var ReturnArray = new string[ListOfItems.Length][](); 

    for(int i = 0; i < ListOfItems.Length; i++) 
     ReturnArray[i] = ListOfItems[i].ToArray(); 

    return ReturnArray; 
} 

これは非常に最適化されたソリューションではありませんが、それは仕事を得るでしょう。そして、あなたはこのようなオブジェクトを削除することができます。おそらく、配列から要素を削除する拡張メソッドの解決法がありますが、Listオブジェクトを使用し、必要に応じてList.ToArray()を呼び出してコードの最後に配列を返す方がはるかに優れています。

0

既存の配列を再利用する代わりに新しいArray of Arraysを作成しても構いません。そのサイズが固定されているので

data = data 
     .Select(x=> data[2][1] == "0"? // Condition to filter 
       x.Take(1).ToArray()  
       : x.ToArray()) 
     .ToArray(); 

チェックこのDemo

関連する問題