你为球员选择的颜色和数字的颜色让事情变得有点混乱。
不过,这对我有用。
开始于:
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");
这是我得到的结果: