DataSet.DataTable.ToArray - alphabetisch sortieren

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 21 Antworten in diesem Thema. Der letzte Beitrag () ist von DerSmurf.

    Ich hab mal was gebastelt, Testprojekt anbei.
    BalancedQueueCreator

    VB.NET-Quellcode

    1. Public Class BalancedQueueCreator(Of T)
    2. Private ReadOnly CountOfQueuesToCreate As Integer = 0
    3. Private ReadOnly Queues As New List(Of List(Of T))
    4. Public Sub New(CountOfQueuesToCreate As Integer)
    5. Me.CountOfQueuesToCreate = CountOfQueuesToCreate
    6. End Sub
    7. Public Function GetBalancedQueuesFrom(Elements As IEnumerable(Of T)) As IEnumerable(Of IEnumerable(Of T))
    8. If CountOfQueuesToCreate = 0 Then Return Nothing
    9. CreateSufficientQueues()
    10. PutAllElementsIntoFirstQueue(Elements)
    11. BalanceQueues()
    12. Return Queues
    13. End Function
    14. Private Sub CreateSufficientQueues()
    15. For i = 0 To CountOfQueuesToCreate - 1
    16. Queues.Add(New List(Of T))
    17. Next
    18. End Sub
    19. Private Sub PutAllElementsIntoFirstQueue(Elements As IEnumerable(Of T))
    20. Queues.First.AddRange(Elements)
    21. End Sub
    22. Private Sub BalanceQueues()
    23. Dim MoveFurtherElements As Boolean
    24. Do
    25. MoveFurtherElements = False
    26. For i = 0 To CountOfQueuesToCreate - 2
    27. If PutLastEntryIntoNextQueueFromQueue(i) Then MoveFurtherElements = True
    28. Next
    29. Loop While MoveFurtherElements
    30. End Sub
    31. Private Function PutLastEntryIntoNextQueueFromQueue(CurrentQueueIndex As Integer) As Boolean
    32. If Not MovingAnotherElementMakesSense(CurrentQueueIndex) Then Return False
    33. MoveLastElementToNextQueue(CurrentQueueIndex)
    34. PutLastEntryIntoNextQueueFromQueue(CurrentQueueIndex + 1)
    35. Return True
    36. End Function
    37. Private Sub MoveLastElementToNextQueue(CurrentQueueIndex As Integer)
    38. Queues(CurrentQueueIndex + 1).Insert(0, Queues(CurrentQueueIndex).Last)
    39. Queues(CurrentQueueIndex).RemoveAt(Queues(CurrentQueueIndex).Count - 1)
    40. End Sub
    41. Private Function MovingAnotherElementMakesSense(CurrentQueueIndex As Integer) As Boolean
    42. Return CurrentQueueIndex < Queues.Count - 1 AndAlso Not NextQueuesHaveSufficientEntries(CurrentQueueIndex)
    43. End Function
    44. Private Function NextQueuesHaveSufficientEntries(QueueIndex As Integer) As Boolean
    45. For i = QueueIndex + 1 To Queues.Count - 1
    46. If Queues(QueueIndex).Count - Queues(i).Count > 1 Then Return False
    47. Next
    48. Return True
    49. End Function
    50. End Class


    Das UnitTest-Projekt wollte ich noch als Quasi-Doku mit hochladen, aber da sind die Packages zu groß. Daher - für die wenigen Interessierten - hier noch die Tests:
    UnitTests

    VB.NET-Quellcode

    1. Imports BalancedQueueCreator
    2. <TestClass()> Public Class BalancedQueueCreatorTests
    3. <TestMethod()> Public Sub CreateNoBalancedQueueWhenThereAreZeroQueuesToCreate()
    4. Dim TestArray = {""}
    5. Dim ResultingQueues = New BalancedQueueCreator(Of String)(0).GetBalancedQueuesFrom(TestArray)
    6. Assert.IsNull(ResultingQueues)
    7. End Sub
    8. <TestMethod()> Public Sub CreateOneBalancedQueueWhenThereIsOneQueueToCreate()
    9. Dim TestArray = {""}
    10. Dim ResultingQueues = New BalancedQueueCreator(Of String)(1).GetBalancedQueuesFrom(TestArray)
    11. Assert.AreEqual(1, ResultingQueues.Count)
    12. End Sub
    13. <TestMethod()> Public Sub OneEntryCreatesOneFilledQueue()
    14. Dim TestArray = {"1"}
    15. Dim ResultingQueues = New BalancedQueueCreator(Of String)(1).GetBalancedQueuesFrom(TestArray)
    16. Assert.AreEqual(1, ResultingQueues.First.Count)
    17. End Sub
    18. <TestMethod()> Public Sub OneEntryCreatesOneFilledQueueWithCorrectContent()
    19. Dim TestArray = {"1"}
    20. Dim ResultingQueues = New BalancedQueueCreator(Of String)(1).GetBalancedQueuesFrom(TestArray)
    21. Assert.AreEqual("1", ResultingQueues.First.First)
    22. End Sub
    23. <TestMethod()> Public Sub TwoEntriesCreateTwoFilledQueue()
    24. Dim TestArray = {"1", "2"}
    25. Dim ResultingQueues = New BalancedQueueCreator(Of String)(2).GetBalancedQueuesFrom(TestArray)
    26. Assert.AreEqual(1, ResultingQueues(0).Count)
    27. Assert.AreEqual(1, ResultingQueues(1).Count)
    28. End Sub
    29. <TestMethod()> Public Sub TwoEntriesCreateTwoFilledQueueWithCorrectContent()
    30. Dim TestArray = {"1", "2"}
    31. Dim ResultingQueues = New BalancedQueueCreator(Of String)(2).GetBalancedQueuesFrom(TestArray)
    32. Assert.AreEqual("1", ResultingQueues(0).First)
    33. Assert.AreEqual("2", ResultingQueues(1).First)
    34. End Sub
    35. <TestMethod()> Public Sub ThreeEntriesCreateThreeFilledQueue()
    36. Dim TestArray = {"1", "2", "3"}
    37. Dim ResultingQueues = New BalancedQueueCreator(Of String)(3).GetBalancedQueuesFrom(TestArray)
    38. Assert.AreEqual(1, ResultingQueues(0).Count)
    39. Assert.AreEqual(1, ResultingQueues(1).Count)
    40. Assert.AreEqual(1, ResultingQueues(2).Count)
    41. End Sub
    42. <TestMethod()> Public Sub FourEntriesCreateThreeFilledQueue211()
    43. Dim TestArray = {"1", "2", "3", "4"}
    44. Dim ResultingQueues = New BalancedQueueCreator(Of String)(3).GetBalancedQueuesFrom(TestArray)
    45. Assert.AreEqual(2, ResultingQueues(0).Count)
    46. Assert.AreEqual(1, ResultingQueues(1).Count)
    47. Assert.AreEqual(1, ResultingQueues(2).Count)
    48. End Sub
    49. <TestMethod()> Public Sub FourEntriesCreateThreeFilledQueue211WithCorrectContent()
    50. Dim TestArray = {"1", "2", "3", "4"}
    51. Dim ResultingQueues = New BalancedQueueCreator(Of String)(3).GetBalancedQueuesFrom(TestArray)
    52. Assert.AreEqual("1", ResultingQueues(0).First)
    53. Assert.AreEqual("2", ResultingQueues(0).Last)
    54. Assert.AreEqual("3", ResultingQueues(1).First)
    55. Assert.AreEqual("4", ResultingQueues(2).First)
    56. End Sub
    57. <TestMethod()> Public Sub FiveEntriesCreateThreeFilledQueue221WithCorrectContent()
    58. Dim TestArray = {"1", "2", "3", "4", "5"}
    59. Dim ResultingQueues = New BalancedQueueCreator(Of String)(3).GetBalancedQueuesFrom(TestArray)
    60. Assert.AreEqual("1", ResultingQueues(0).First)
    61. Assert.AreEqual("2", ResultingQueues(0).Last)
    62. Assert.AreEqual("3", ResultingQueues(1).First)
    63. Assert.AreEqual("4", ResultingQueues(1).Last)
    64. Assert.AreEqual("5", ResultingQueues(2).First)
    65. End Sub
    66. End Class

    Bilder
    • Results.png

      22,81 kB, 830×290, 59 mal angesehen
    Dateien
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „VaporiZed“ ()