过于简单,做作的问题
我有一个可枚举的实例,它可以包含一系列连续的元素,以及与它们相互分散的一些其他元素。一个简单的例子
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 的连接。等等
不要太在意字符串的细节;将“1”视为 object 的实例,将Word
“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}
};
然后我可以轻松地完成下一步,但我无法理解如何到达第一步。