如何仅发出序列中的最后一个匹配元素?



我有一个按排序顺序排列的事件流。每个事件都是具有键属性(其 ID)的组的一部分。对于非 ID 属性,这些事件具有不同的值。我希望忽略 ID 更改之前除最后一个事件之外的所有事件。例如

{ID:1, Prop: "V1"}, {ID:1,  Prop:"V2"}, {ID:1,  Prop:"V3"}, {ID:2,  Prop:"V1"}, {ID:2,  Prop:"V2"}, {ID:2,  Prop:"V3"}, {ID:2,  Prop:"V25"}, {ID:3,  Prop:"V1"}, {ID:3,  Prop:"V8"}

我只想发出:

{ID:1,  Prop:"V3"},{ID:2,  Prop:"V25"},{ID:3,  Prop:"V8"}

我使用了GroupByid,然后TakeLast(1)但是TakeLast,据我所知,它将等到流完成,并且似乎可能会占用更多内存更长时间。我知道,只要我在流中看到不同的 ID,我就看到了该 ID 序列中的最后一个 - 所以我想在看到键属性发生变化时立即发出该值。我想有点像distinctUntilChange但给了我最后一个价值。

我希望在流中看到第一个元素时立即发出ID:2元素。

我想过缓冲什么的,但仍然让我的头脑被动。有什么想法吗?

source.Buffer(2, 1)
.Where(i => i.Count == 2 ? (i[0].ID != i[1].ID) : true)
.Select(i => i[0])

保持Observable的 2 个最新元素的运行缓冲区。 如果 ID 更改或缓冲区仅包含一个元素(最后一个元素),则发出缓冲区的第一项。

相关内容

  • 没有找到相关文章

最新更新