マップされたファイルvb.netを使用して辞書式順序で配列を並べ替える方法

SSpoke

これは私が理解するのはちょっと複雑です

    Dim test() As Byte = New Byte() {50, 40, 30, 10, 10}
    Dim answer() As UInteger = SortLexicoGraphicallyArrayMappedFile(test)

答えは、最小の配列値から最大の配列値にソートされた各ローテーションです。

Rotation 0 = 50, 40, 30, 10, 10
Rotation 1 = 10, 50, 40, 30, 10
Rotation 2 = 10, 10, 50, 40, 30
Rotation 3 = 30, 10, 10, 50, 40
Rotation 4 = 40, 30, 10, 10, 50

この配列を手作業で並べ替えると、次のようになります。

Rotation 2 = 10, 10, 50, 40, 30
Rotation 1 = 10, 50, 40, 30, 10
Rotation 3 = 30, 10, 10, 50, 40
Rotation 4 = 40, 30, 10, 10, 50
Rotation 0 = 50, 40, 30, 10, 10

だから答えは 2, 1, 3, 4, 0

無限ループに陥り、指を置くことができません。
データは常に静的であるため、前の質問は機能します。すべてのデータをあちこちに移動しようとします。これが、おそらくスタックする理由です。」その回避策を見つけてください。後でCPU時間を節約するためにすべてのデータを移動する必要があるため、以下のページから回答を選択しませんでした。

辞書式順序で配列を注文する方法vb.net

これが私のコードです

Public Function GetRotation(Data As Byte(), rotation As UInteger) As Byte()
   'Rotation Left
    Dim rotationData As New List(Of Byte)

    Dim start As UInteger = Data.Length - rotation Mod Data.Length

    For i = 0 To Data.Length - 1
        rotationData.Add(Data((start + i) Mod (Data.Length)))
    Next

    Return rotationData.ToArray()
End Function

   Public Function SortLexicoGraphicallyArrayMappedFile(ByRef data As Byte()) As UInteger()
        Dim OrderedRotations As New List(Of UInteger)
        Dim rotatedData As Byte()
        Dim rotation As UInteger = 0


        Dim mmF As MemoryMappedFile
        mmF = MemoryMappedFile.CreateFromFile(My.Application.Info.DirectoryPath & "\outFile", FileMode.CreateNew, "test", CLng(data.LongLength * data.LongLength))
        Dim mmVA As MemoryMappedViewAccessor
        mmVA = mmF.CreateViewAccessor(0, data.LongLength * data.LongLength)

        Dim pos As Long = 0

        For rotation = 0 To data.Length - 1
            rotatedData = GetRotation(data, rotation)
            mmVA.WriteArray(Of Byte)(pos, rotatedData, 0, rotatedData.Length)
            pos += rotatedData.Length

        Next

        For rotation = 0 To data.Length - 1
            OrderedRotations.Add(rotation)
        Next

        Dim eachRotation As Integer = 0
        Dim data1() As Byte
        ReDim data1(data.Length - 1)
        Dim data2() As Byte
        ReDim data2(data.Length - 1)
        Dim index As Long
        For rotation = 0 To data.Length - 1
            Dim flag As Boolean
            Do
                flag = False
                For eachRotation = OrderedRotations.Count - 1 To 0 Step -1
                    mmVA.ReadArray(Of Byte)((OrderedRotations(rotation) * data.Length), data1, 0, data.Length)
                    If OrderedRotations(eachRotation) = OrderedRotations(rotation) Then Continue For
                    mmVA.ReadArray(Of Byte)((OrderedRotations(eachRotation) * data.Length), data2, 0, data.Length)

                    For index = 0 To data.Length - 1
                        If data1(index) > data2(index) Then
                            Exit For
                        ElseIf data1(index) < data2(index) Then
                            mmVA.WriteArray(Of Byte)((OrderedRotations(eachRotation) * data.Length), data1, 0, data1.Length)
                            mmVA.WriteArray(Of Byte)((OrderedRotations(rotation) * data.Length), data2, 0, data2.Length)

                            Dim tmpFirst As UInteger = OrderedRotations(rotation)
                            OrderedRotations(rotation) = OrderedRotations(eachRotation)
                            OrderedRotations(eachRotation) = tmpFirst
                            flag = True
                            Exit For
                        End If
                    Next
                Next
            Loop While flag
        Next

        Return OrderedRotations.ToArray()
    End Function
user3435580

これが正しいかどうかはわかりませんが、修正しました。

Public Function SortLexicoGraphicallyArrayMappedFile(ByRef data As Byte()) As UInteger()
    Dim OrderedRotations As New List(Of UInteger)
    Dim rotatedData As Byte()
    Dim rotation As UInteger = 0


    Dim mmF As MemoryMappedFile
    mmF = MemoryMappedFile.CreateFromFile(My.Application.Info.DirectoryPath & "\outFile296", FileMode.CreateNew, "test", CLng(data.LongLength * data.LongLength))
    Dim mmVA As MemoryMappedViewAccessor
    mmVA = mmF.CreateViewAccessor(0, data.LongLength * data.LongLength)

    Dim pos As Long = 0

    For rotation = 0 To data.Length - 1
        rotatedData = GetRotation(data, rotation)
        mmVA.WriteArray(Of Byte)(pos, rotatedData, 0, rotatedData.Length)
        pos += rotatedData.Length

    Next

    For rotation = 0 To data.Length - 1
        OrderedRotations.Add(rotation)
    Next

    Dim eachRotation As Integer = 0
    Dim data1() As Byte
    ReDim data1(data.Length - 1)
    Dim data2() As Byte
    ReDim data2(data.Length - 1)
    Dim index As Long
    For rotation = 0 To data.Length - 1
        Dim flag As Boolean
        Do
            flag = False
            For eachRotation = OrderedRotations.Count - 1 To 0 Step -1
                If rotation = eachRotation Then Exit For
                mmVA.ReadArray(Of Byte)(rotation * data.Length, data1, 0, data.Length)
                mmVA.ReadArray(Of Byte)((eachRotation * data.Length), data2, 0, data.Length)

                For index = 0 To data.Length - 1
                    If data1(index) < data2(index) Then
                        Exit For
                    ElseIf data1(index) > data2(index) Then
                        mmVA.WriteArray(Of Byte)((eachRotation * data.Length), data1, 0, data1.Length)
                        mmVA.WriteArray(Of Byte)((rotation * data.Length), data2, 0, data2.Length)

                        Dim tmpFirst As UInteger = OrderedRotations(eachRotation)
                        OrderedRotations(eachRotation) = OrderedRotations(rotation)
                        OrderedRotations(rotation) = tmpFirst
                        flag = True
                        Exit For
                    End If
                Next
            Next
        Loop While flag
    Next

    Return OrderedRotations.ToArray()
End Function

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

Linqを使用して配列を長さ、次に値で並べ替える方法

分類Dev

辞書Swiftに含まれる配列値で辞書を並べ替える方法

分類Dev

カスタムComparerを使用して、配列を異なる辞書式順序で並べ替える方法は?

分類Dev

クロス集計での並べ替え式による順序を使用した列/行グループの並べ替え

分類Dev

Pythonを使用してファイル名を特定の順序で並べ替える方法

分類Dev

文字列値を使用してファイルコンテンツを特定の順序で並べ替える

分類Dev

配列を長さで並べ替えてからアルファベット順に並べ替える

分類Dev

行の並べ替え順序を変更した後、「並べ替え順序」列を再配置する方法

分類Dev

tie要素を使用して辞書を値で並べ替える順序を変更しないでください

分類Dev

postgresqlを使用して、文字列のカスタム並べ替え順序でクエリを並べ替えるにはどうすればよいですか?

分類Dev

Pythonでネストされた順序付き辞書を並べ替える

分類Dev

awkを使用してbashで別の順序付けられた配列パターンを使用して、複数行の配列を並べ替えます

分類Dev

キーと並べ替え順序を使用してネストされた配列に並べ替えを実装する方法

分類Dev

マップでの並べ替え(辞書式順序)

分類Dev

辞書に格納されているタプル内の配列を並べ替える方法

分類Dev

パンダ-インデックス付きの辞書を使用して、列の行を並べ替える方法

分類Dev

xsltsortを使用して指定された順序で並べ替える

分類Dev

辞書式順序で長方形を並べ替えようとしています。(x、y、幅、高さ)

分類Dev

順序付けられた配列を使用して辞書を並べ替える

分類Dev

「すべてのフィールド」による辞書式順序での並べ替え

分類Dev

文字列に格納されている数値を辞書式順序で並べ替えるにはどうすればよいですか?

分類Dev

C#でlinqクエリを使用してループ順序を並べ替える方法は?

分類Dev

jQuery を使用して、順序配列に応じてテーブルの tr を並べ替える

分類Dev

LINQを使用してC#でネストされた辞書を降順に並べ替える方法

分類Dev

辞書式順序で並べ替えられた配列に最初に別の配列を追加するにはどうすればよいですか?

分類Dev

CUDA:推力を使用して別の配列で定義された順序に従って配列を並べ替えます

分類Dev

php 7-マルチレベルの連想配列をキーで並べ替えて、辞書式に各レベルで並べ替えます

分類Dev

Swift4.2選択したプロパティと並べ替え順序を使用して配列を並べ替える

分類Dev

配列:自然な順序の並べ替えでファイルの位置を取得する方法は?

Related 関連記事

  1. 1

    Linqを使用して配列を長さ、次に値で並べ替える方法

  2. 2

    辞書Swiftに含まれる配列値で辞書を並べ替える方法

  3. 3

    カスタムComparerを使用して、配列を異なる辞書式順序で並べ替える方法は?

  4. 4

    クロス集計での並べ替え式による順序を使用した列/行グループの並べ替え

  5. 5

    Pythonを使用してファイル名を特定の順序で並べ替える方法

  6. 6

    文字列値を使用してファイルコンテンツを特定の順序で並べ替える

  7. 7

    配列を長さで並べ替えてからアルファベット順に並べ替える

  8. 8

    行の並べ替え順序を変更した後、「並べ替え順序」列を再配置する方法

  9. 9

    tie要素を使用して辞書を値で並べ替える順序を変更しないでください

  10. 10

    postgresqlを使用して、文字列のカスタム並べ替え順序でクエリを並べ替えるにはどうすればよいですか?

  11. 11

    Pythonでネストされた順序付き辞書を並べ替える

  12. 12

    awkを使用してbashで別の順序付けられた配列パターンを使用して、複数行の配列を並べ替えます

  13. 13

    キーと並べ替え順序を使用してネストされた配列に並べ替えを実装する方法

  14. 14

    マップでの並べ替え(辞書式順序)

  15. 15

    辞書に格納されているタプル内の配列を並べ替える方法

  16. 16

    パンダ-インデックス付きの辞書を使用して、列の行を並べ替える方法

  17. 17

    xsltsortを使用して指定された順序で並べ替える

  18. 18

    辞書式順序で長方形を並べ替えようとしています。(x、y、幅、高さ)

  19. 19

    順序付けられた配列を使用して辞書を並べ替える

  20. 20

    「すべてのフィールド」による辞書式順序での並べ替え

  21. 21

    文字列に格納されている数値を辞書式順序で並べ替えるにはどうすればよいですか?

  22. 22

    C#でlinqクエリを使用してループ順序を並べ替える方法は?

  23. 23

    jQuery を使用して、順序配列に応じてテーブルの tr を並べ替える

  24. 24

    LINQを使用してC#でネストされた辞書を降順に並べ替える方法

  25. 25

    辞書式順序で並べ替えられた配列に最初に別の配列を追加するにはどうすればよいですか?

  26. 26

    CUDA:推力を使用して別の配列で定義された順序に従って配列を並べ替えます

  27. 27

    php 7-マルチレベルの連想配列をキーで並べ替えて、辞書式に各レベルで並べ替えます

  28. 28

    Swift4.2選択したプロパティと並べ替え順序を使用して配列を並べ替える

  29. 29

    配列:自然な順序の並べ替えでファイルの位置を取得する方法は?

ホットタグ

アーカイブ