ObservableCollection(响应式扩展)的值排序

4

我的应用程序中有一个包含超过400个推钉的列表。为了避免UI阻塞,我使用以下术语以及Rx框架。

var observer = localStoreCollection.ToObservable();
observer.Subscribe(StoresOnNext, StoresOnError, StoresOnCompleted);

在OnNext方法中,我将逐一将这些推钉添加到我的绑定列表中。除了地图之外,我还使用相同的集合填充列表。因此,我需要根据最近的位置对此列表进行排序。我的问题是如何在不重新分配列表的情况下对该集合进行排序(类似于按引用调用的方式)。
注:距离的赋值也是在OnNext方法中完成的。

StoresOnNext是什么?你是想简单地拥有一个对象的可观察度,该对象具有某个指标(距离)的最低值吗? - Aron
StoreNext将迭代localStoreCollection的每个值,因此在OnNext中,我将将该pushpin添加到我的绑定可观察集合中。 - StezPet
我完全不知道那是什么意思。你能否包含其余的代码呢?StoresOnNext是什么等等... - Aron
1个回答

1

我猜测你的问题,因为没有明确的说明...

编辑... 重新阅读了您带有NB的问题。一般来说,我强烈反对使用函数式编程来为数据对象分配值的概念。相反,我建议您创建一个新对象,其中包括PushPin和Distance属性,或者使用映射将距离信息存储为一种“扩展属性”。

var observer = localStoreCollection.ToObservable();
observer.Subscribe(StoresOnNext, StoresOnError, StoresOnCompleted);
var closestObservable = observer.Min(Comparer<PushPin>.Create((a, b) => Double.Comparer(Distance(a), Distance(b)));

或者甚至可能

var observer = localStoreCollection.ToObservable();
observer.Subscribe(StoresOnNext, StoresOnError, StoresOnCompleted);
var distanceMap = new ConcurrentDictionary<PushPin, double>();
var closestObservable = observer.Min(Comparer<PushPin>.Create((a, b) => Double.Comparer(distanceMap.GetOrAdd(a, Distance), distanceMap.GetOrAdd(b, Distance)));

如果Distance(PushPin)函数很耗费资源。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接