我正在研究如何使用加权值对列表进行有效排序。
每个项目都有一个 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/