List of Structur nach einer Membervariable ordnen

  • VB.NET

Es gibt 3 Antworten in diesem Thema. Der letzte Beitrag () ist von razor8.

    List of Structur nach einer Membervariable ordnen

    Hallo Leute, ich habe eine List (Of DownloadInfo) mit folgender Structur:

    VB.NET-Quellcode

    1. Public Structure DownloadInfo
    2. Public Url As String
    3. Public Version As Double
    4. Public CRC32 As String
    5. End Structure


    die Liste wird Aus einer XML-Datei ausgelesen, manchmal sind aber die einträge in der XML nicht geordnet. Deshalb will ich die Liste aufsteigend nach der Versionsnummer(Public Version As Double) ordnen sodass diese xml:
    Spoiler anzeigen

    XML-Quellcode

    1. <?xml version="1.0"?>
    2. <DATAClass xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    3. <AllEntries>
    4. <data>
    5. <version>5,0</version>
    6. <url>http://razor.unitedidiots.net/l4d2/patch5.uuep</url>
    7. <crc32>9D9CB7A7</crc32>
    8. </data>
    9. <data>
    10. <version>5,0</version>
    11. <url>http://singularity.us.to/dz/l4d2/patch5.uuep</url>
    12. <crc32>9D9CB7A7</crc32>
    13. </data>
    14. <data>
    15. <version>6,0</version>
    16. <url>http://razor.unitedidiots.net/l4d2/patch6.uuep</url>
    17. <crc32>C3B6E5FF</crc32>
    18. </data>
    19. <data>
    20. <version>6,0</version>
    21. <url>http://singularity.us.to/dz/l4d2/patch6.uuep</url>
    22. <crc32>C3B6E5FF</crc32>
    23. </data>
    24. <data>
    25. <version>7,0</version>
    26. <url>http://razor.unitedidiots.net/l4d2/patch7.uuep</url>
    27. <crc32>D6F23990</crc32>
    28. </data>
    29. <data>
    30. <version>7,0</version>
    31. <url>http://singularity.us.to/dz/l4d2/patch7.uuep</url>
    32. <crc32>D6F23990</crc32>
    33. </data>
    34. <data>
    35. <version>8,0</version>
    36. <url>http://razor.unitedidiots.net/l4d2/patch8.uuep</url>
    37. <crc32>86D69C5E</crc32>
    38. </data>
    39. <data>
    40. <version>8,0</version>
    41. <url>http://singularity.us.to/dz/l4d2/patch8.uuep</url>
    42. <crc32>86D69C5E</crc32>
    43. </data>
    44. <data>
    45. <version>9,0</version>
    46. <url>http://razor.unitedidiots.net/l4d2/patch9.uuep</url>
    47. <crc32>478B84D2</crc32>
    48. </data>
    49. <data>
    50. <version>9,0</version>
    51. <url>http://singularity.us.to/dz/l4d2/patch9.uuep</url>
    52. <crc32>478B84D2</crc32>
    53. </data>
    54. <data>
    55. <version>10,0</version>
    56. <url>http://singularity.us.to/dz/l4d2/patch10.uuep</url>
    57. <crc32>62B34518</crc32>
    58. </data>
    59. <data>
    60. <version>10,0</version>
    61. <url>http://razor.unitedidiots.net/l4d2/patch10.uuep</url>
    62. <crc32>62B34518</crc32>
    63. </data>
    64. <data>
    65. <version>11,0</version>
    66. <url>http://singularity.us.to/dz/l4d2/patch11.uuep</url>
    67. <crc32>9A7B2E24</crc32>
    68. </data>
    69. <data>
    70. <version>11,0</version>
    71. <url>http://razor.unitedidiots.net/l4d2/patch11.uuep</url>
    72. <crc32>9A7B2E24</crc32>
    73. </data>
    74. <data>
    75. <version>12,0</version>
    76. <url>http://razor.unitedidiots.net/l4d2/patch12.uuep</url>
    77. <crc32>D6FC94</crc32>
    78. </data>
    79. <data>
    80. <version>12,0</version>
    81. <url>http://singularity.us.to/dz/l4d2/patch12.uuep</url>
    82. <crc32>D6FC94</crc32>
    83. </data>
    84. <data>
    85. <version>13,0</version>
    86. <url>http://singularity.us.to/dz/l4d2/patch13.uuep</url>
    87. <crc32>9E4922D4</crc32>
    88. </data>
    89. <data>
    90. <version>13,0</version>
    91. <url>http://razor.unitedidiots.net/l4d2/patch13.uuep</url>
    92. <crc32>9E4922D4</crc32>
    93. </data>
    94. <data>
    95. <version>14,0</version>
    96. <url>http://razor.unitedidiots.net/l4d2/patch14.uuep</url>
    97. <crc32>FC154206</crc32>
    98. </data>
    99. <data>
    100. <version>14,0</version>
    101. <url>http://singularity.us.to/dz/l4d2/patch14.uuep</url>
    102. <crc32>FC154206</crc32>
    103. </data>
    104. <data>
    105. <version>15,0</version>
    106. <url>http://razor.unitedidiots.net/l4d2/patch15.uuep</url>
    107. <crc32>263D3C69</crc32>
    108. </data>
    109. <data>
    110. <version>15,0</version>
    111. <url>http://singularity.us.to/dz/l4d2/patch15.uuep</url>
    112. <crc32>263D3C69</crc32>
    113. </data>
    114. <data>
    115. <version>16,0</version>
    116. <url>http://singularity.us.to/dz/l4d2/patch16.uuep</url>
    117. <crc32>E16BF17F</crc32>
    118. </data>
    119. <data>
    120. <version>16,0</version>
    121. <url>http://razor.unitedidiots.net/l4d2/patch16.uuep</url>
    122. <crc32>E16BF17F</crc32>
    123. </data>
    124. <data>
    125. <version>17,0</version>
    126. <url>http://razor.unitedidiots.net/l4d2/patch17.uuep</url>
    127. <crc32>435B3D33</crc32>
    128. </data>
    129. <data>
    130. <version>17,0</version>
    131. <url>http://singularity.us.to/dz/l4d2/patch17.uuep</url>
    132. <crc32>435B3D33</crc32>
    133. </data>
    134. <data>
    135. <version>18,0</version>
    136. <url>http://singularity.us.to/dz/l4d2/patch18.uuep</url>
    137. <crc32>F2E12207</crc32>
    138. </data>
    139. <data>
    140. <version>18,0</version>
    141. <url>http://razor.unitedidiots.net/l4d2/patch18.uuep</url>
    142. <crc32>F2E12207</crc32>
    143. </data>
    144. <data>
    145. <version>19,0</version>
    146. <url>http://razor.unitedidiots.net/l4d2/patch19.uuep</url>
    147. <crc32>6B8329A1</crc32>
    148. </data>
    149. <data>
    150. <version>19,0</version>
    151. <url>http://singularity.us.to/dz/l4d2/patch19.uuep</url>
    152. <crc32>6B8329A1</crc32>
    153. </data>
    154. <data>
    155. <version>20,0</version>
    156. <url>http://singularity.us.to/dz/l4d2/patch20.uuep</url>
    157. <crc32>52A5AF0A</crc32>
    158. </data>
    159. <data>
    160. <version>20,0</version>
    161. <url>http://razor.unitedidiots.net/l4d2/patch20.uuep</url>
    162. <crc32>52A5AF0A</crc32>
    163. </data>
    164. <data>
    165. <version>21,0</version>
    166. <url>http://razor.unitedidiots.net/l4d2/patch21.uuep</url>
    167. <crc32>C9ACA549</crc32>
    168. </data>
    169. <data>
    170. <version>21,0</version>
    171. <url>http://singularity.us.to/dz/l4d2/patch21.uuep</url>
    172. <crc32>C9ACA549</crc32>
    173. </data>
    174. </AllEntries>
    175. </DATAClass>


    zu dieser wird (im übertragenem sinn, es geht immer noch um die list of (downloadinfo) welche diese information enthält):

    Spoiler anzeigen

    XML-Quellcode

    1. <?xml version="1.0"?>
    2. <DATAClass xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    3. <AllEntries>
    4. <data>
    5. <version>5,0</version>
    6. <url>http://razor.unitedidiots.net/l4d2/patch5.uuep</url>
    7. <crc32>9D9CB7A7</crc32>
    8. </data>
    9. <data>
    10. <version>5,0</version>
    11. <url>http://singularity.us.to/dz/l4d2/patch5.uuep</url>
    12. <crc32>9D9CB7A7</crc32>
    13. </data>
    14. <data>
    15. <version>6,0</version>
    16. <url>http://razor.unitedidiots.net/l4d2/patch6.uuep</url>
    17. <crc32>C3B6E5FF</crc32>
    18. </data>
    19. <data>
    20. <version>6,0</version>
    21. <url>http://singularity.us.to/dz/l4d2/patch6.uuep</url>
    22. <crc32>C3B6E5FF</crc32>
    23. </data>
    24. <data>
    25. <version>7,0</version>
    26. <url>http://razor.unitedidiots.net/l4d2/patch7.uuep</url>
    27. <crc32>D6F23990</crc32>
    28. </data>
    29. <data>
    30. <version>7,0</version>
    31. <url>http://singularity.us.to/dz/l4d2/patch7.uuep</url>
    32. <crc32>D6F23990</crc32>
    33. </data>
    34. <data>
    35. <version>8,0</version>
    36. <url>http://razor.unitedidiots.net/l4d2/patch8.uuep</url>
    37. <crc32>86D69C5E</crc32>
    38. </data>
    39. <data>
    40. <version>8,0</version>
    41. <url>http://singularity.us.to/dz/l4d2/patch8.uuep</url>
    42. <crc32>86D69C5E</crc32>
    43. </data>
    44. <data>
    45. <version>9,0</version>
    46. <url>http://razor.unitedidiots.net/l4d2/patch9.uuep</url>
    47. <crc32>478B84D2</crc32>
    48. </data>
    49. <data>
    50. <version>9,0</version>
    51. <url>http://singularity.us.to/dz/l4d2/patch9.uuep</url>
    52. <crc32>478B84D2</crc32>
    53. </data>
    54. <data>
    55. <version>10,0</version>
    56. <url>http://singularity.us.to/dz/l4d2/patch10.uuep</url>
    57. <crc32>62B34518</crc32>
    58. </data>
    59. <data>
    60. <version>10,0</version>
    61. <url>http://razor.unitedidiots.net/l4d2/patch10.uuep</url>
    62. <crc32>62B34518</crc32>
    63. </data>
    64. <data>
    65. <version>11,0</version>
    66. <url>http://singularity.us.to/dz/l4d2/patch11.uuep</url>
    67. <crc32>9A7B2E24</crc32>
    68. </data>
    69. <data>
    70. <version>11,0</version>
    71. <url>http://razor.unitedidiots.net/l4d2/patch11.uuep</url>
    72. <crc32>9A7B2E24</crc32>
    73. </data>
    74. <data>
    75. <version>12,0</version>
    76. <url>http://razor.unitedidiots.net/l4d2/patch12.uuep</url>
    77. <crc32>D6FC94</crc32>
    78. </data>
    79. <data>
    80. <version>12,0</version>
    81. <url>http://singularity.us.to/dz/l4d2/patch12.uuep</url>
    82. <crc32>D6FC94</crc32>
    83. </data>
    84. <data>
    85. <version>13,0</version>
    86. <url>http://singularity.us.to/dz/l4d2/patch13.uuep</url>
    87. <crc32>9E4922D4</crc32>
    88. </data>
    89. <data>
    90. <version>13,0</version>
    91. <url>http://razor.unitedidiots.net/l4d2/patch13.uuep</url>
    92. <crc32>9E4922D4</crc32>
    93. </data>
    94. <data>
    95. <version>14,0</version>
    96. <url>http://razor.unitedidiots.net/l4d2/patch14.uuep</url>
    97. <crc32>FC154206</crc32>
    98. </data>
    99. <data>
    100. <version>14,0</version>
    101. <url>http://singularity.us.to/dz/l4d2/patch14.uuep</url>
    102. <crc32>FC154206</crc32>
    103. </data>
    104. <data>
    105. <version>15,0</version>
    106. <url>http://razor.unitedidiots.net/l4d2/patch15.uuep</url>
    107. <crc32>263D3C69</crc32>
    108. </data>
    109. <data>
    110. <version>15,0</version>
    111. <url>http://singularity.us.to/dz/l4d2/patch15.uuep</url>
    112. <crc32>263D3C69</crc32>
    113. </data>
    114. <data>
    115. <version>16,0</version>
    116. <url>http://singularity.us.to/dz/l4d2/patch16.uuep</url>
    117. <crc32>E16BF17F</crc32>
    118. </data>
    119. <data>
    120. <version>16,0</version>
    121. <url>http://razor.unitedidiots.net/l4d2/patch16.uuep</url>
    122. <crc32>E16BF17F</crc32>
    123. </data>
    124. <data>
    125. <version>17,0</version>
    126. <url>http://razor.unitedidiots.net/l4d2/patch17.uuep</url>
    127. <crc32>435B3D33</crc32>
    128. </data>
    129. <data>
    130. <version>17,0</version>
    131. <url>http://singularity.us.to/dz/l4d2/patch17.uuep</url>
    132. <crc32>435B3D33</crc32>
    133. </data>
    134. <data>
    135. <version>18,0</version>
    136. <url>http://singularity.us.to/dz/l4d2/patch18.uuep</url>
    137. <crc32>F2E12207</crc32>
    138. </data>
    139. <data>
    140. <version>18,0</version>
    141. <url>http://razor.unitedidiots.net/l4d2/patch18.uuep</url>
    142. <crc32>F2E12207</crc32>
    143. </data>
    144. <data>
    145. <version>19,0</version>
    146. <url>http://razor.unitedidiots.net/l4d2/patch19.uuep</url>
    147. <crc32>6B8329A1</crc32>
    148. </data>
    149. <data>
    150. <version>19,0</version>
    151. <url>http://singularity.us.to/dz/l4d2/patch19.uuep</url>
    152. <crc32>6B8329A1</crc32>
    153. </data>
    154. <data>
    155. <version>20,0</version>
    156. <url>http://singularity.us.to/dz/l4d2/patch20.uuep</url>
    157. <crc32>52A5AF0A</crc32>
    158. </data>
    159. <data>
    160. <version>20,0</version>
    161. <url>http://razor.unitedidiots.net/l4d2/patch20.uuep</url>
    162. <crc32>52A5AF0A</crc32>
    163. </data>
    164. <data>
    165. <version>21,0</version>
    166. <url>http://razor.unitedidiots.net/l4d2/patch21.uuep</url>
    167. <crc32>C9ACA549</crc32>
    168. </data>
    169. <data>
    170. <version>21,0</version>
    171. <url>http://singularity.us.to/dz/l4d2/patch21.uuep</url>
    172. <crc32>C9ACA549</crc32>
    173. </data>
    174. </AllEntries>
    175. </DATAClass>


    ich habe dies mit folgendem Code versucht aber entweder es fehlen einträge oder sie sind (etwas) falsh geordnet:

    VB.NET-Quellcode

    1. Dim da As New XML.DATAClass
    2. da = XML.CollectionSerialized.LoadXML(xml_file)
    3. Dim smallestver As Double = 2147483648.0
    4. Dim newlist As New List(Of DownloadInfo)
    5. For i = 0 To da.AllEntries.Count - 1
    6. Dim dlist As New List(Of DownloadInfo)
    7. For a = i To da.AllEntries.Count - 1
    8. Dim newentry As New DownloadInfo
    9. newentry.CRC32 = da.AllEntries(a).crc32
    10. newentry.Url = da.AllEntries(a).url
    11. newentry.Version = da.AllEntries(a).version
    12. dlist.Add(newentry)
    13. Next
    14. For Each thing In dlist
    15. If thing.Version < smallestver Then
    16. smallestver = thing.Version
    17. End If
    18. Next
    19. For Each thing In dlist
    20. If thing.Version = smallestver Then
    21. If Not newlist.Contains(thing) Then
    22. newlist.Add(thing)
    23. End If
    24. End If
    25. Next
    26. smallestver = 2147483648.0
    27. Next
    28. End If


    vlt weis von euch jemand eine bessere lösung. danke für eure hilfe

    Edit by der_Kurt:
    * Expander eingefügt *

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „der_Kurt“ ()

    dazu machst du dir eine ComparerKlasse, welche den IComparer(Of DeineStruktur) implementiert, VS gibt dir dann sofort eine Vorlage mit der Funktion Compare....
    dort musst du einen Wert zurückgeben(-1 und 1 kann vertauscht sein, musst du probieren):
    x ist kleiner als y -> -1
    x ist gleich y -> 0
    x ist größer als y -> 1
    x und y ist dabei deine Struktur, das heißt du kannst die einzelnen Variablen dieser Struktur vergleichen, um einen String alphabetisch zu sortieren gibt es die String.Compare Funktion... also Return String.Compare(x.String,y.String), bei einer alphabetischen Sortierung umgekehrt gehört einfach noch ein minus davor...
    Ich wollte auch mal ne total überflüssige Signatur:
    ---Leer---
    LINQ kann helfen. Ich weiss nicht, ob dies für dich eine Option wäre (laut Prefix VB.NET nicht)
    folgendes Beispiel habe ich getestet: (Ausschlaggebend ist die Zeile 3)

    VB.NET-Quellcode

    1. Public Class Form1
    2. Dim l As New List(Of DownloadInfo)
    3. Dim sort = From elem In l Order By elem.Version Select elem
    4. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    5. l.Add(New DownloadInfo With {.Url = "url8", .version = 8, .crc32 = ""})
    6. l.Add(New DownloadInfo With {.Url = "url7", .version = 7, .crc32 = ""})
    7. l.Add(New DownloadInfo With {.Url = "url1", .version = 1, .crc32 = ""})
    8. l.Add(New DownloadInfo With {.Url = "url5", .version = 6, .crc32 = ""})
    9. l.Add(New DownloadInfo With {.Url = "url2", .version = 2, .crc32 = ""})
    10. For Each element In l
    11. MessageBox.Show(element.Url, "Liste unsortiert", MessageBoxButtons.OK, MessageBoxIcon.Stop)
    12. Next
    13. For Each element In sort
    14. MessageBox.Show(element.Url, "Liste sortiert", MessageBoxButtons.OK, MessageBoxIcon.Information)
    15. Next
    16. End Sub
    17. Public Structure DownloadInfo
    18. Public Url As String
    19. Public Version As Double
    20. Public CRC32 As String
    21. End Structure
    22. End Class


    Falls LINQ in deiner VB-Version nicht verfügbar ist, dann... Viel Spaß mit der Comparer-Klasse ;)

    LG, der_Kurt