将对象从最匹配的对象排列到最不匹配的对象
本文关键字:对象 排列 不匹配 | 更新日期: 2023-09-27 18:22:09
我正在处理c#中的一个问题。我有一个对象数组和一个关键对象。对象有五个属性:
- 组
- 国家
- 服务
- 行业
- 技术
我想排列对象,以便首先显示与关键对象最匹配的对象。我想按以下顺序排列数据-
- 它将获得与关键对象组相同组的对象
- 如果发现同一组的物品,则会根据国家进行订购。即,如果找到相同的参数值,则将根据下一个参数来决定顺序
- 对于具有不同组的对象,也将遵循相同的过程
我有一个解决方案:我用5个参数的每个排列和组合创建了32个linq查询,然后逐一合并了这32个结果。这个解决方案给了我想要的结果,但这个解决方案需要大量的处理。请提供任何较短的解决方案。
提前谢谢。
只需使用OrderByDescending
+ThenByDescending
:
var orderedObjects = objects
.OrderByDescending(o => o.Group == keyObj.Group)
.ThenByDescending(o => o.Country == keyObj.Country)
.ThenByDescending(o => o.Service == keyObj.Service)
.ThenByDescending(o => o.Industry == keyObj.Industry)
.ThenByDescending(o => o.Technology == keyObj.Technology)
.ThenBy(o => o.Group) // now start ordering by the properties itself
.ThenBy(o => o.Country)
.ThenBy(o => o.Service)
.ThenBy(o => o.Industry)
.ThenBy(o => o.Technology)
.ToArray();
比较返回true
或false
,而true
比false
"大",因此是Descending
,因为我们首先希望匹配属性。
用不同的权重为每场比赛打分怎么样?
小组赛可以是100分,一个国家1000分,一次发球10000分。。。
然后根据得分对项目进行排序。