【发布时间】:2020-08-05 16:40:59
【问题描述】:
要求
给定一个字母流:'a'、'a'、'b'、'b'、'b'、'c'
发出以下输出,这是到目前为止遇到的每个字母出现次数的总和:
[{ letter: 'a', count : 1 }]
[{ letter: 'a', count : 2 }]
[{ letter: 'a', count : 2 }, { letter: 'b', count : 1 }]
[{ letter: 'a', count : 2 }, { letter: 'b', count : 2 }]
[{ letter: 'a', count : 2 }, { letter: 'b', count : 3 }]
[{ letter: 'a', count : 2 }, { letter: 'b', count : 3 }, { letter: 'c', count : 1 }]
潜在解决方案 #1
类似于https://stackoverflow.com/a/32878533/1188074 - 我最初尝试过这样的事情,但认为它不是很'rxjs like'。根据解决方案 #2 再次查看它,它要简单得多,而且很可能是要走的路。
潜在解决方案 #2
部分尝试:https://stackblitz.com/edit/so-accumulated-letters
基于https://stackoverflow.com/a/53021875/1188074
它在打印单个字母计数时起作用,即:
{ letter: 'a', count : 1 }
{ letter: 'a', count : 2 }
{ letter: 'b', count : 1 }
{ letter: 'b', count : 2 }
{ letter: 'b', count : 3 }
{ letter: 'c', count : 1 }
但是它不跟踪其他以前的字母。我尝试过使用另一个scan、combineAll 等
- 我应该使用解决方案 #1 还是 #2 中的方法?
- 如果是 #2,我怎样才能让它累积其他字母数?
谢谢
【问题讨论】:
-
您发布的 stackblitz 链接似乎不起作用
-
@amakhrov 对此感到抱歉,链接已更新
-
看起来 stackoverflow.com/a/32878533/1188074 已经满足您的需求。如果可变性是一个问题,将
countL函数修改为不可变是微不足道的
标签: rxjs