将对象从最匹配的对象排列到最不匹配的对象

本文关键字:对象 排列 不匹配 | 更新日期: 2023-09-27 18:22:09

我正在处理c#中的一个问题。我有一个对象数组和一个关键对象。对象有五个属性:

  1. 国家
  2. 服务
  3. 行业
  4. 技术

我想排列对象,以便首先显示与关键对象最匹配的对象。我想按以下顺序排列数据-

  1. 它将获得与关键对象组相同组的对象
  2. 如果发现同一组的物品,则会根据国家进行订购。即,如果找到相同的参数值,则将根据下一个参数来决定顺序
  3. 对于具有不同组的对象,也将遵循相同的过程

我有一个解决方案:我用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();

比较返回truefalse,而truefalse"大",因此是Descending,因为我们首先希望匹配属性。

用不同的权重为每场比赛打分怎么样?

小组赛可以是100分,一个国家1000分,一次发球10000分。。。

然后根据得分对项目进行排序。