我有一个关于 RX 的小问题。我有来自键盘的符号流,我需要将它们分组。 ';' 应该开始一个新组符号来自流。简单来说,我需要一个类似于 Buffer 的操作符,但它会在某个条件为真时触发,而不是在一些时间延迟或事件计数之后触发。有没有办法用 RX 中已经存在的运算符(operator)来构建它,还是我应该自己注册?
最佳答案
这是一个来源。
var source = new[] { 'a', 'b', ';', 'c', 'd', 'e', ';' }.ToObservable();
这就是你要问的:
var groups = source
// Group the elements by some constant (0)
// and end the group when we see a semicolon
.GroupByUntil(x => 0, group => group.Where(x => x == ';'))
这是一种使用方法:
groups
// Log that we're on the next group now.
.Do(x => Console.WriteLine("Group: "))
// Merge / Concat all the groups together
// {{a..b..;}..{c..d..e..;}} => {a..b..;..c..d..e..;}
.Merge()
// Ignore the semicolons? This is optional, I suppose.
.Where(x => x != ';')
// Log the characters!
.Do(x => Console.WriteLine(" {0}", x))
// Make it so, Number One!
.Subscribe();
输出:
Group:
a
b
Group:
c
d
e
关于c# - 带有反应式扩展的分区序列,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22811411/