c# - 如何对对象集合进行排序,必须根据一些不断变化的参数进行排序

标签 c# list sorting weighted

我正在研究如何使用加权值对列表进行有效排序。

每个项目都有一个 ID、名称和文件路径。每个项目还有一个值列表,这些值被分配了一个百分比,显示它们与每个值的相关程度。

我需要对列表进行排序,以便列表顶端的项目是与当前参数最相关的项目。

可以说,

第一项:

  • A:50,B:30,C:20,D:10
  • X:50,Z:20

第二项:

  • A:100、B:0、C:0、D:0
  • X:0,Z:100

我的参数是 A 和 Z。显然,第二项应该位于我的列表的顶部,因为它是最相关的项目。但我该如何实现呢?

奖励:如果能够稍微随机化就好了,我不想每次都得到明确的相关项目。

谢谢

最佳答案

假设您知道权重函数,您可以使用 Linq to Objects:

var sorted = (from o in myList orderby o.SortingValue select o).ToList();

在此示例中,SortingValue 将是对象的一个​​属性,它封装问题中的属性并实现您的算法。

SortingValue 的示例算法:

您可以使用字典来保存相关性百分比

然后,您的“当前参数”可以用作字典的键来获取相关权重:

Dictionary<string, double> weightDictionary = // Load somehow

double SortingValue
{
    get {
        double sortingValue;

        foreach(string currentParameter in currentParameters)
        {
            sortingValue += weightDictionary[currentParameter];
        }

        // You could use Math.Random to get a number between say -0.1 and -.1.  
        // Multiply sortingValue by that random number.
        return sortingValue;
    }
}

关于c# - 如何对对象集合进行排序,必须根据一些不断变化的参数进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10150222/

相关文章:

c# - Lightinject - 检测到递归依赖

c# - 为多个 HttpStatusCodes 设置一个 ProducesResponseType typeof

java - 如何有效地为List的所有元素添加前缀?

javascript - 使用多种排序对多个html表进行排序

sorting - 如何在 MIPS 中使用系统调用 9 (sbrk) 进行动态内存分配

c# - 具有动态命名参数的扩展方法

c# - 使用正则表达式在字符串中查找以某个索引开头的索引

list - haskell中的排列

c# - 如何在 C# 中将 List<BaseClass> 转换为 List<ChildClass>?

java - 选择一个好的排序算法