我希望将前两个序列结合起来,如大理石图所示
- 在此示例中,不同的彩票玩家选择号码,并且 他们选择的数字由数字上小点的颜色表示 第一行。
- 确定中奖号码时(第 2 行)
- 需要确定彩票中奖者(第 3 行输出)。用于彩票 获胜者小点代表获胜的玩家。
期望的输出
- 所以对于红色中奖号码来说,并不是最新中奖的彩票玩家,而是恰好是第三个黑人玩家
- 对于棕色中奖号码,第一个蓝色玩家应该被放入输出流
- 对于最后一个红色中奖号码,应该是最后一个获胜的红色号码(白人玩家),而不是第一个红色号码(黑人玩家)
- 请注意,输出应包含玩家和数字(对象),包括其相关属性,例如玩家姓名以及与中奖数字相关的赢得金额等(这可以通过选择器 Func 来实现)
接收解决方案?
- 我尝试使用.Zip、.When、.CombineLatest、.Buffer 等,但无法达到预期的结果?
- API 中是否有任何可以使用的原生内容,或者哪种自定义组合可以实现所需的输出?
最佳答案
您选择的玩家颜色和数字颜色让事情变得有点困惑。
尽管如此,这对我有用。
开头:
var picks = new Subject<KeyValuePair<string, string>>(); // key == number, value = player
var numbers = new Subject<string>();
然后构建一个按数字选择的字典序列:
var scanned =
picks
.Scan(new Dictionary<string, string>(), (d, kvp) =>
{
// You need a new dictionary each time
var d2 = new Dictionary<string, string>(d);
d2[kvp.Key] = kvp.Value;
return d2;
});
现在使用 .Switch()
进行组合:
var query =
scanned
.Select(d =>
numbers.Select(n => new
{
player = d[n],
number = n
}))
.Switch();
就是这样。
这是运行它的代码:
query.Subscribe(x => Console.WriteLine(x));
picks.OnNext(new KeyValuePair<string, string>("Brown", "Blue"));
picks.OnNext(new KeyValuePair<string, string>("Grey", "Green"));
picks.OnNext(new KeyValuePair<string, string>("Red", "Black"));
picks.OnNext(new KeyValuePair<string, string>("Grey", "Yellow"));
numbers.OnNext("Red");
numbers.OnNext("Brown");
picks.OnNext(new KeyValuePair<string, string>("Grey", "Black"));
picks.OnNext(new KeyValuePair<string, string>("Red", "White"));
numbers.OnNext("Red");
这是我得到的结果:
关于c# - 两个流的条件配对 - 在响应式扩展中组合 If,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30801436/