2016-08-04 26 views
0

Ich ziehe derzeit Daten aus einer Datenbank und rangiere sie, wenn ich sie durchlaufe. Beispiele für solche Nummern sind 45, 45, 67, 99, 34, 65, 88, 22, 90, 90, 90, 23, 55, 46. Das sind insgesamt 14 Nummern, die ich durchlaufen und ordnen möchte.Rangnummern in einer Schleife vb.net

Dim i As Integer() = {45, 45, 67, 99, 34, 65, 88, 22, 90, 90, 90, 23, 55, 46} 
    Dim lastScore As Integer 
    Dim position As Integer = 0 

    For Each i1 In i 
     If Val(lastScore) <> Val(i1) Then 
      position += 1 
      Console.WriteLine(position & vbCrLf) 
     ElseIf Val(lastScore) = Val(i1) Then 
      Console.WriteLine(position & vbCrLf) 
      position += 1 
     End If 
     lastScore = Val(i1) 
    Next 

Die aktuelle Ausgabe des Codes oben ist:

1, 1, 3, 4, 5, 6, 7, 8, 9, 9, 10, 12, 13, 14 

was falsch ist. Die erwartete Ausgabe soll sein:

1, 1, 3, 4, 5, 6, 7, 8, 9, 9, 9, 12, 13, 14 

Wie kann ich das erreichen?

+1

Wenn Sie eine Datenbank verwenden, die Ranking-Funktionen unterstützen Sie es –

+0

es tun sollen Wahrscheinlich sollte man nicht Erhöhen Sie die 'Position' im Fall 'Val (lastScore) = Val (i1) '. Außerdem muss Ihr else-Zweig kein 'ElseIf' sein, ein regulärer' Else' würde den Trick machen (keine Notwendigkeit, das genaue Gegenteil Ihrer ursprünglichen 'if'-Anweisung neu zu bewerten) – Icepickle

+0

@TimSchmelter Ich möchte es sein Ich bin in der Lage, es selbst mit Hilfe einer Schleife zu sortieren – BlackPearl

Antwort

2

Hier ist eine hässliche Code, der die erwartete Ausgabe erzeugt:

Dim i As Integer() = {45, 45, 67, 99, 34, 65, 88, 22, 90, 90, 90, 23, 55, 46} 
    Dim lastScore As Integer 
    Dim lastScorePosition As Integer 
    Dim position As Integer = 1 

    For Each i1 In i 
     If Val(lastScore) <> Val(i1) Then 
      Console.Write(position & ",") 
      lastScorePosition = position 
      lastScore = Val(i1) 
     Else 
      Console.Write(lastScorePosition & ",") 
     End If 
     position += 1 
    Next 
+0

Jede Chance, die Sie könnten erklären Sie besser, warum Sie es einen hässlichen Code finden, und was er tun könnte, um seinen Code zu verbessern? Brauchst du die Val-Ausdrücke noch? – Icepickle

+0

@Icepickle der Code wurde importiert, das 'Val()' ist notwendig in der Subroutine, aus der es importiert wurde. – BlackPearl

+0

@Tamas Es funktionierte perfekt ... Danke – BlackPearl

0

Das erwartete Ergebnis ist nicht korrekt. I.e. Warum gibt es keinen Rang 2?

Einfacher Ranking mit relativ einfachen Code erreicht:

Sub Main() 

    Dim i As Integer() = {45, 45, 67, 99, 34, 65, 88, 22, 90, 90, 90, 23, 55, 46} 
    Dim lastScore As Integer 
    Dim position As Integer 

    Dim sb As New StringBuilder 

    For Each i1 In i 
     If Not lastScore = i1 Then position += 1 
     sb.Append(position & ", ") 
     lastScore = i1 
    Next 

    sb.Remove(sb.Length - 2, 2) 
    Console.WriteLine(sb.ToString) 

    Console.ReadLine() 
End Sub 

Die Ausgabe lautet:

1, 1, 2, 3, 4, 5, 6, 7, 8, 8, 8, 9, 10, 11