J'essaie de trouver un moyen de classer des éléments dans une liste et de conserver les résultats dans un objet ou une autre liste. Je connais la méthode des ordonnances, mais je ne sais pas exactement comment créer un numéro de rang correspondant pour chaque article.
Par exemple: p>
public class NumberRank
{
public int Number {get; set;}
public int Rank {get; set;}
public NumberRank(int number)
{
Number = number;
Rank = ????????;
}
}
3 Réponses :
L'une des surcharges du Sélectionnez la méthode d'extension Retourner l'index:
Projetons chaque élément d'une séquence dans une nouvelle forme en incorporant l'index de l'élément. P> blockQuote>
Vous pouvez l'utiliser pour faire votre rang: p>
xxx pré> p>
Ceci devrait le faire:
public class NumberRank
{
public int Number {get; set;}
public int Rank {get; set;}
public NumberRank(int number, int rank)
{
Number = number;
Rank = rank;
}
}
class Test
{
static void Main()
{
List<int> numbers = new List<int>();
numbers.Add(650);
numbers.Add(150);
numbers.Add(500);
numbers.Add(200);
List<NumberRank> numberRanks = numbers.OrderByDescending(n => n).Select((n, i) => new NumberRank(n, i + 1)).ToList();
// check it worked
foreach(NumberRank nr in numberRanks) Console.WriteLine("{0} : {1}", nr.Rank, nr.Number);
Console.ReadKey();
}
}
Cela ne devrait-il pas dupliquer les rangs des mêmes numéros? Si vous ajoutez 650 B> à la liste. Il en résulte avec les rangs 1 2 3 .. code> où il devrait comme 1 1 3 .. code>
Function Rank(Of T As IComparable)(list As IEnumerable(Of T), item As T) As Integer
Return list.Count(Function(x) x.CompareTo(item) < 0) + 1
End Function
Public Sub Main()
Dim l = New Integer() {9, 1, 3, 8, 4, 6}
Console.WriteLine("6 is the " & Rank(l,6) & "th element of ")
Console.WriteLine([String].Join(" ", l))
End Sub
6 is the 4th element of
9 1 3 8 4 6
Or, in C# http://dotnetfiddle.net/3ZGeJ1
Avez-vous besoin de préserver l'ordre d'origine?
Non, juste un type de classement.
Les numéros en double ont-ils le même rang?
@ user1512559 Avez-vous pu obtenir une solution? J'ai un défi similaire.