Ranking methods: Difference between revisions

Line 465:
7.0 39 Stephen
</pre>
=={{header|C#|C sharp}}==
{{trans|D}}
<lang csharp>using System;
using System.Collections.Generic;
using System.Linq;
 
namespace RankingMethods {
class Program {
static void Main(string[] args) {
Dictionary<string, int> scores = new Dictionary<string, int> {
["Solomon"] = 44,
["Jason"] = 42,
["Errol"] = 42,
["Gary"] = 41,
["Bernard"] = 41,
["Barry"] = 41,
["Stephen"] = 39,
};
 
StandardRank(scores);
ModifiedRank(scores);
DenseRank(scores);
OrdinalRank(scores);
FractionalRank(scores);
 
Console.ReadLine();
}
 
static void StandardRank(Dictionary<string, int> data) {
Console.WriteLine("Standard Rank");
 
var list = data.Values.Distinct().ToList();
list.Sort((a, b) => b.CompareTo(a));
 
int rank = 1;
foreach (var value in list) {
int temp = rank;
foreach (var k in data.Keys) {
if (data[k] == value) {
Console.WriteLine("{0} {1} {2}", temp, value, k);
rank++;
}
}
}
 
Console.WriteLine();
}
 
static void ModifiedRank(Dictionary<string, int> data) {
Console.WriteLine("Modified Rank");
 
var list = data.Values.Distinct().ToList();
list.Sort((a, b) => b.CompareTo(a));
 
int rank = 0;
foreach (var value in list) {
foreach (var k in data.Keys) {
if (data[k] == value) {
rank++;
}
}
 
foreach (var k in data.Keys) {
if (data[k] == value) {
Console.WriteLine("{0} {1} {2}", rank, data[k], k);
}
}
}
 
Console.WriteLine();
}
 
static void DenseRank(Dictionary<string, int> data) {
Console.WriteLine("Dense Rank");
 
var list = data.Values.Distinct().ToList();
list.Sort((a, b) => b.CompareTo(a));
 
int rank = 1;
foreach (var value in list) {
foreach (var k in data.Keys) {
if (data[k] == value) {
Console.WriteLine("{0} {1} {2}", rank, data[k], k);
}
}
rank++;
}
 
Console.WriteLine();
}
 
static void OrdinalRank(Dictionary<string, int> data) {
Console.WriteLine("Ordinal Rank");
 
var list = data.Values.Distinct().ToList();
list.Sort((a, b) => b.CompareTo(a));
 
int rank = 1;
foreach (var value in list) {
foreach (var k in data.Keys) {
if (data[k] == value) {
Console.WriteLine("{0} {1} {2}", rank, data[k], k);
rank++;
}
}
}
 
Console.WriteLine();
}
 
static void FractionalRank(Dictionary<string, int> data) {
Console.WriteLine("Fractional Rank");
 
var list = data.Values.Distinct().ToList();
list.Sort((a, b) => b.CompareTo(a));
 
int rank = 0;
foreach (var value in list) {
double avg = 0;
int cnt = 0;
 
foreach (var k in data.Keys) {
if (data[k] == value) {
rank++;
cnt++;
avg += rank;
}
}
avg /= cnt;
 
foreach (var k in data.Keys) {
if (data[k] == value) {
Console.WriteLine("{0:F1} {1} {2}", avg, data[k], k);
}
}
}
 
Console.WriteLine();
}
}
}</lang>
{{out}}
<pre>Standard Rank
1 44 Solomon
2 42 Jason
2 42 Errol
4 41 Gary
4 41 Bernard
4 41 Barry
7 39 Stephen
 
Modified Rank
1 44 Solomon
3 42 Jason
3 42 Errol
6 41 Gary
6 41 Bernard
6 41 Barry
7 39 Stephen
 
Dense Rank
1 44 Solomon
2 42 Jason
2 42 Errol
3 41 Gary
3 41 Bernard
3 41 Barry
4 39 Stephen
 
Ordinal Rank
1 44 Solomon
2 42 Jason
3 42 Errol
4 41 Gary
5 41 Bernard
6 41 Barry
7 39 Stephen
 
Fractional Rank
1.0 44 Solomon
2.5 42 Jason
2.5 42 Errol
5.0 41 Gary
5.0 41 Bernard
5.0 41 Barry
7.0 39 Stephen</pre>
 
=={{header|D}}==
<lang D>import std.algorithm;
1,452

edits