0

さらなる種類の問題が発生しています:

{0xFF, 0xFF} はデリミタです。

LINQ を使用して {{0xNN, 0xNN, 0xNN, 0xNN} , {0xNN, 0xNN}} のような列挙を取得することは可能ですか?

4

2 に答える 2

1

このような拡張機能を記述して、任意の長さの区切り文字を使用して 1 回のパスでジョブを実行できます。

public static class Extensions
{
    public static IEnumerable<IEnumerable<T>> Split<T>(
        this IEnumerable<T> source,
        IEnumerable<T> delimiter)
    {
       var delimiterList = delimiter.ToList();
       var outputBuffer = new List<T>();
       var m = 0;

       foreach(var item in source)
       {
           if item.Equals(delimiterList[m])
           {
               m++;

               if(m == delimiterList.Count)
               {
                  m = 0;

                  if (outputBuffer.Count > 0)
                  {
                      yield return outputBuffer;
                      outputBuffer = new List<T>();
                  }
               }
           }
           else
           {
               outputBuffer.AddRange(delimiterList.Take(m));

               if (item.Equals(delimiterList[0]))
               {
                   m = 1;
               }
               else
               {
                   m = 0;
                   outputBuffer.Add(item);
               }
           }              
       }

       outputBuffer.AddRange(delimiterList.Take(m)); 

       if (outputBuffer.Count > 0)
       {
           yield return outputBuffer;
       }
   }
}

このように使用できます。

var joinedBytes = new byte[] { ... }
var delimiter = new byte[] { 0xFF, 0xFF }

var splitBytes = joinedBytes.Split(delimiter);
于 2012-07-05T16:33:10.583 に答える
-1

区切り文字はコレクションの2つの要素によって定義されているため、LINQでは実行できないと思います。

于 2012-07-05T15:16:24.657 に答える