過度に単純化された不自然な質問
一連の連続した要素を含むことができる列挙可能なインスタンスと、それらと相互に分散された他の要素があります。簡単な例
var items = new[]
{"1","1","1","1","1","varX","1","1","1","1","varY","1","1"};
ご覧のとおり、文字列1
が繰り返され、時々別のものがあります (非常に認識可能)。列挙可能なものを形成する方法で集約したいとしましょう
var aggregated = new[]
{ "11111", "varX", "1111", "varY","11"};
これは明らかに、「連結されたすべての 1」の後に「var」が続き、その後に次の連結された 1 のセットが続きます。等
文字列の詳細にこだわりすぎないでください。Word
「1」は object のインスタンス、「var」は object のインスタンスと考えてくださいVariable
。今、私はWord
(文を作るために)一緒に連結し、Variable
別の方法で扱いたい
LINQ を使用して、または昔ながらの foreach を使用して、その集計を作成するにはどうすればよいでしょうか。
少し単純化された、同じ質問
「トークン」の列挙可能なリストがあります。トークンには 2 種類しかなく、どちらも基本トークンから継承されます。
public abstract class Token{}
public class WordToken : Token {}
public class VariableToken : Token {}
文字列:
こんにちは {varX} お元気ですか {varY} さようなら
私のコードによって次の列挙可能にトークン化されます
var tokens = new[]
{
WordToken,
WordToken,
VariableToken,
WordToken,
WordToken,
WordToken,
VariableToken,
WordToken
};
私はそれを
var newList = new []
{
FragmentToken,
VariableToken,
FragmentToken,
VariableToken,
FragmentToken
};
FragmentToken
連結されたすべての単語はどこにありますか
明らかな最初のステップは、元のリストを集約して作成することです
var step = new[]
{
new[]{WordToken, WordToken},
new[]{VariableToken},
new[]{ WordToken, WordToken, WordToken},
new[]{VariableToken},
new[]{WordToken}
};
その後、次のステップを簡単に実行できましたが、この最初のステップに到達する方法がわかりません。