-2

string[]配列要素が開始しない場合、配列から配列要素を削除できますか'%'

string[] saBytesReceived = null; 
bDataReceived = new byte[bBytesToRead]; //byte[] array
networkStream.Read(bDataReceived, 0, bBytesToRead);
try
{
   if (ASCIIEncoding.ASCII.GetString(bDataReceived).Trim() != "")
   {
       saBytesReceived = ASCIIEncoding.ASCII.GetString(bDataReceived)
                         .Split(new string[] { "\0" }, StringSplitOptions.None);
      saBytesReceived = saBytesReceived.Select(s => s.Replace("?", "")).ToArray();     
      saBytesReceived = //Remove array elements in One single Line
    }
}

ループを使用したくない..LINQを使用するだけで、単一行で実行できますか?

私のサンプル配列

65928346897326
34623462346346
%346346
%436534
32632463667364

結果の配列は

%346346
%436534
4

1 に答える 1

7

Linq はクエリ用であり、変更 (アイテムの削除) 用ではありません。% で始まる項目を取得できます。

saBytesReceived = saBytesReceived.Where(s => s.StartsWith("%")).ToArray();

これにより、必要なアイテムを含む新しい配列が作成されます。

%346346
%436534

はい、内部的に Linq は loop を使用します。


ところで、コードを単一のクエリにリファクタリングできます。

   string response = ASCIIEncoding.ASCII.GetString(bDataReceived);

   if (!String.IsNullOrWhiteSpace(response))
   {      
       saBytesReceived = response
              .Split(new string[] { "\0" }, StringSplitOptions.None)
              .Select(s => s.Replace("?", ""))
              .Where(s => s.StartsWith("%"))
              .ToArray();
   }
于 2013-01-04T13:52:37.940 に答える