我正在尝试编写一个linq查询来对服务器对象列表进行排序。 服务器的关键属性是Load(百分比0.1等)和DistanceInKm。
e.g server is var server = new Server{Load=0.1,DistanceInKm=200}
服务器可以拥有可空的负载。在这种情况下,分组时我想将可以为空的负载推送到其组的后面。
因此对于第一种情况: 服务器列表(loc表示相同的位置/距离s1表示服务器1,2 ..) Loc1 = 3km,Loc2 = 1km,Lo3 = 2km
- LOC1 S1:加载NULL
- LOC1 S2:加载0.1
- LOC2 S1:加载0.7
- LOC2 S2:加载0.1
- LOC3 S1:加载0.1
醇>
结果:
- LOC2 S2:加载0.1
- LOC3 S1:加载0.1
- LOC1 S2:加载0.1
- LOC2 S1:加载0.7
- LOC1 S1:加载NULL
醇>
上述逻辑产生了结果。目的是为每个有序负载提供按距离排序的服务器列表。 但是对于以下列表:
- LOC1 S1:加载NULL
- LOC1 S2:加载0.1
- LOC1 S3:加载0.6
- LOC1 S4:加载0.2
- LOC2 S1:加载0.7
- LOC2 S2:加载0.1
- LOC2 S3:加载0.2
- LOC3 S1:加载0.1
醇>
但结果给出了:
- LOC2 S2:加载0.1
醇>
- LOC3 S1:加载0.1
- LOC1 S2:加载0.1
- LOC2 S3:加载0.2
- LOC1 S4:加载0.2
- LOC1 S3:负载0.6 - > 这是不正确的。因为它应该是loc2 s1负载0.7,因为它距离更近
也许我没有正确解释这个问题。我在伪代码中想到了这样的事情:
虽然(重复是真的) 对于每个组 取第一项(使用跳过(计数)并取(1) 增量计数
对每个组重复,然后取n + 1项。重复直到 在所有组中不再有任何项目要迭代。这应该产生 按顺序从组中的项目。由于这些组按顺序按距离分组,并且项目本身按负载顺序通过遍历每个组第一,第二......等应按距离和负载生成有序的平面列表