我有一份玩家名单,每名玩家都有一份技能等级列表。 我想要做的是根据与特定搜索列表匹配的评分排序这些玩家。比较整数列表,然后根据相似性排序它们。
下面是四个球员的榜样:
List<Skill> skillsA = new List<Skill>();
List<Skill> skillsB = new List<Skill>();
List<Skill> skillsC = new List<Skill>();
List<Skill> skillsD = new List<Skill>();
skillsA.Add(new Skill() { Name = "Speed", Value = 1 });
skillsA.Add(new Skill() { Name = "Agility", Value = 5 });
skillsA.Add(new Skill() { Name = "Strength", Value = 3 });
skillsA.Add(new Skill() { Name = "Endurance", Value = 4 });
skillsB.Add(new Skill() { Name = "Speed", Value = 5 });
skillsB.Add(new Skill() { Name = "Agility", Value = 2 });
skillsB.Add(new Skill() { Name = "Strength", Value = 1 });
skillsB.Add(new Skill() { Name = "Endurance", Value = 3 });
skillsC.Add(new Skill() { Name = "Speed", Value = 5 });
skillsC.Add(new Skill() { Name = "Agility", Value = 3 });
skillsC.Add(new Skill() { Name = "Strength", Value = 2 });
skillsC.Add(new Skill() { Name = "Endurance", Value = 2 });
skillsD.Add(new Skill() { Name = "Speed", Value = 1 });
skillsD.Add(new Skill() { Name = "Agility", Value = 2 });
skillsD.Add(new Skill() { Name = "Strength", Value = 5 });
skillsD.Add(new Skill() { Name = "Endurance", Value = 4 });
Player A = new Player() { Skills = skillsA };
Player B = new Player() { Skills = skillsB };
Player C = new Player() { Skills = skillsC };
Player D = new Player() { Skills = skillsD };
这将是搜索列表我比较:
List<Skill> matchSkill = new List<Skill>();
matchSkill.Add(new Skill() { Name = "Speed", Value = 5 });
matchSkill.Add(new Skill() { Name = "Agility", Value = 2 });
matchSkill.Add(new Skill() { Name = "Strength", Value = 1 });
matchSkill.Add(new Skill() { Name = "Endurance", Value = 1 });
SkillSearch SkillSearch = new SkillSearch() { Skills = matchSkill };
我应该回来的球员名单下令PlayerB,PlayerC,PlayerD ,玩家A
技能列表将始终是相同的大小和顺序。技能总是在1-5之间。我试图用绝对值来比较这些值之间的差异。例如,如果搜索是针对(3)2和4会比1或5
总之更接近的匹配,如果你只是看它们作为数字数组的你将有:
search = { 5, 2, 1, 1}
playerb = { 5, 2, 1, 3} : difference {0,0,0,2} (2 total)
playerc = { 5, 3, 2, 2} : difference {0,1,1,1} (3 total)
playerd = { 1, 2, 5, 4} : difference {4,0,4,3} (11 total)
playera = { 1, 5, 3, 4} : difference {4,3,2,3} (12 total)
我将如何使用C#订购这些产品?我更喜欢linq结果。我只是不确定如何得到这些订单。
对不起,由于某种原因,我忘了添加问题... – 2012-02-03 17:28:27
似乎你已选择曼哈顿距离作为你的距离测量。那么,问题是什么?您需要计算两组技能之间绝对差异的总和,并按最低距离对其进行排名。 – Andreas 2012-02-03 18:29:34