2016-11-23 3 views
-1

in vb.net ich ein Array von Werten wie unten
ein Array sortieren, in dem jedes Element ein Komma getrennte Liste von Werten

arr(0) = "US,20,10,true" 
arr(1) = "Ind,22,8,true" 
arr(2) = "UK,40,6,true" 
arr(3) = "Chi,30,22,true" 
arr(4) = "Jpn,50,18,true" 
arr(5) = "Isr,18,15,true" 

gegeben, was ich jetzt erreichen wollte, ist dieses Array zu sortieren, in die aufsteigende Reihenfolge des dritten Werts in jedem Element (dh Sortieren des gesamten Arrays basierend auf den Werten 10, 8, 6, 22, 18 und 15). wie angegeben Nach der Sortierung ich das Array unter
bekommen sollte

arr(0) ="UK,40,6,true" 
arr(1) ="Ind,22,8,true" 
arr(2) ="US,20,10,true" 
arr(3) ="Isr,18,15,true" 
arr(4) ="Jpn,50,18,true" 
arr(5) ="Chi,30,22,true" 

kann mir jemand bieten den Code bitte?

Danke, KDR

+2

'kann mir jemand bitte den Code zur Verfügung stellen?' Nein. StackOverflow ist keine Seite, auf der wir Ihnen den Code zur Verfügung stellen. Stattdessen [zeige uns, was du versucht hast] (http://stackoverflow.com/tour) bisher und wo du feststeckst. Wir helfen Ihnen dann gerne weiter. –

+0

Lesen Sie hier: https://msdn.microsoft.com/en-us/library/aw9s5t8f.aspx Dann versuchen Sie etwas Code, dann veröffentlichen Sie den Code, wenn Sie immer noch nicht die Ergebnisse erhalten, die Sie erwarten. –

Antwort

2

Input:

Dim arr(5) As String 
arr(0) = "US,20,10,true" 
arr(1) = "Ind,22,8,true" 
arr(2) = "UK,40,6,true" 
arr(3) = "Chi,30,22,true" 
arr(4) = "Jpn,50,18,true" 
arr(5) = "Isr,18,15,true" 

arr = arr.Cast(Of String).Select(Function(a) a.Split(","c)). 
          Select(Function(a) New With {Key .State = a(0), 
                  Key .No1 = a(1), 
                  Key .No2 = a(2), 
                  Key .Bool = a(3)}). 
          OrderBy(Function(o) CInt(o.No2)). 
          Select(Function(s) String.Concat(s.State, ",", s.No1, ",", s.No2, ",", s.Bool)).ToArray() 

For Each item In arr 
    Console.WriteLine(item) 
Next 

Output:

UK,40,6,true 
Ind,22,8,true 
US,20,10,true 
Isr,18,15,true 
Jpn,50,18,true 
Chi,30,22,true 
  • Split Eingabefeldelemente durch Komma => split(0,0) = "US", split(0, 1) = "20", ... split(1,0) = "Ind",split(1,1) = "22", ....
  • erstellen IEnumerable anonymisierter Typs für jedes Element, von Split
  • Convert to integer und Reihenfolge von anonymen Typ .No2 (= 3. Wert in array)
  • Übertragung bestellt IEnumerable von anonymen Typ zurück zu Array
+0

Ich habe eine nicht linq Version geschrieben und Ihre ist fast 5 mal schneller - Nizza. –

+0

Danke für die Rückmeldung. Ich war ehrlich besorgt über die Leistung * mit * linq;) –

+0

Natürlich könnte mein Code auch Hosen sein. Ich bin ein ziemlich einfacher Programmierer :) –

0

Warum Sie eine Datatable nicht verwenden?

Dim Table1 As New DataTable 

' Create four typed columns in the DataTable. 
Table1.Columns.Add("Country", GetType(String)) 
Table1.Columns.Add("Num1", GetType(Integer)) 
Table1.Columns.Add("Num2", GetType(Integer)) 
Table1.Columns.Add("Bol", GetType(Boolean)) 

' Add some rows in the DataTable. 
Table1.Rows.Add("IT", "123", "456", True) 
Table1.Rows.Add("DE", "456", "789", False) 
Verwandte Themen