Καλώς ορίσατε στο dotNETZone.gr - Σύνδεση | Εγγραφή | Βοήθεια
σε

 

Αρχική σελίδα Ιστολόγια Συζητήσεις Εκθέσεις Φωτογραφιών Αρχειοθήκες

Array πρόβλημα...

Îåêßíçóå áðü ôï ìÝëïò AlKiS. Τελευταία δημοσίευση από το μέλος AlKiS στις 14-01-2012, 22:13. Υπάρχουν 11 απαντήσεις.
Ταξινόμηση Δημοσιεύσεων: Προηγούμενο Επόμενο
  •  02-01-2012, 12:21 68762

    Array πρόβλημα...

    Καλημέρα ντοτ νέτ ζόουν :)

    κάτι πολύ περίεργο γίνεται σήμερα (δηλαδή απο χτες γίνεται αλλά προτού γράψω γιαυτό έπρεπε να κάνω δοκιμές να το λύσω μόνος...)

    Αντιμεταθέτω τυχαία στοιχεία απο την μια μεριά του πίνακα στην άλλη σε ένα 2-dimentional Αrray(1,ν)

    Αυτό το κάνω καλώντας Random Number απο 0 ως 1, άρα όταν είναι 0 ΔΕΝ γίνεται η αντιμετάθεση, όταν βγει 1 τότε γίνεται.

    Κρατάω όλες τις τιμές των random αριθμών σε μια μεταβλητή, και τους "αντιμεταθετιμένους" πίνακες σε μια άλλη.

    συγκρίνοντας αυτές τις 2 μεταβλητές, όταν βλέπω "0" θα έπρεπε να μην βλέπω αντιμετάθεση, όταν βλέπω "1" θα έπρεπε να βλέπω.. αλλά πριτσ, ότι θέλει κάνει..

    Που είναι το λάθος, έσπασα το κεφάλιμου να το βρω αλλά μου φαίνεται ολόσωστο ρε γμτ..

        Private Sub btnPermutation_Click(sender As System.Object, e As System.EventArgsHandles btnPermutation.Click
            Dim f_DataSet(,) As Decimal
            Dim n_NumberOfErrors As Integer
            Dim G_PermutationIndices(,) As Boolean
            Dim f_Permuted()(,) As Decimal
            Dim MaximumVerticalDeviation() As Decimal
     
            If dgvData.SelectedColumns.Count = 2 Then
                If txtRepetition.Text <> "" Then
                    If CULng(txtRepetition.Text) >= 2 Then
                        n_NumberOfErrors = dgvData.Rows.Count
     
                        ReDim f_DataSet(1, n_NumberOfErrors)
     
                        For i As Integer = 0 To n_NumberOfErrors - 1
                            f_DataSet(0, i) = CDec(dgvData.Item(dgvData.SelectedColumns(1).Index, i).Value)
                            f_DataSet(1, i) = CDec(dgvData.Item(dgvData.SelectedColumns(0).Index, i).Value)
                        Next
     
                        Call TwoPairedSamplesPermutation(f_DataSet, CInt(txtRepetition.Text), n_NumberOfErrors, G_PermutationIndices, f_Permuted)
     
                        ReDim MaximumVerticalDeviation(n_NumberOfErrors)
                        'Rdo.SetSymbol("PermutedSet1", )
                        'MaximumVerticalDeviation = CType(Rdo.Evaluate("ks.test("), Decimal())
     
                        MsgBox("Done!")
     
                    Else
                        MsgBox("The permutation's repetition must be greater than or equal to 2"MsgBoxStyle.Exclamation)
                    End If
     
                Else
                    MsgBox("You need to set how many times to repeat the permutation proceedure first!"MsgBoxStyle.Exclamation)
                End If
                ElseIf dgvData.Columns.Count = 0 Then
                    MsgBox("You need some data first!" & vbCrLf & "Either import some data by clicking the " & RemBtnHotLetter(btnImport) & " or insert the data into the grid by hand."MsgBoxStyle.Exclamation)
     
                Else
                    MsgBox("You need to have two (2) colums selected for the permutation to work."MsgBoxStyle.Exclamation)
     
                End If
     
                'TODO CODE
     
                'If P < 0.05 Then
                '    MsgBox("Statistically significant Difference" & ks.gof.observed & )
                '
                'End If
     
        End Sub

    Και to sub που καλείτε είναι αυτό:

        Dim txtStr As New TextBox
     
        Dim RandomClass As New Random()
        Dim RandomNumber As Integer
        Public Sub TwoPairedSamplesPermutation(ByVal f_DataSet(,) As DecimalByVal T_Repetition As IntegerByVal n_NumberOfErrors As IntegerByRef G_PermutationIndices(,) As BooleanByRef f_Permuted_o()(,) As Decimal)
            ReDim G_PermutationIndices(n_NumberOfErrors - 1, T_Repetition - 1)
            Dim f_Permuted(T_Repetition - 1)(,) As Decimal
            Dim txtIndices As New TextBox
     
            For i As Integer = 0 To T_Repetition - 1                                                                    'For every repetition
     
                Dim Str(n_NumberOfErrors) As String
                Str(0) = "	" & "V1" & "	" & "V2"
     
                f_Permuted(i) = f_DataSet
                For j = 0 To n_NumberOfErrors - 1                                                                       'For Rows.Length
                    RandomNumber = RandomClass.Next(2)
     
                    If RandomNumber = 0 Then
                        G_PermutationIndices(j, i) = False
                        'Do not permute!
     
                    Else
                        G_PermutationIndices(j, i) = True
                        Dim tempDec As Decimal = f_Permuted(i)(0, j)                                                    'Permutation..
                        f_Permuted(i)(0, j) = f_Permuted(i)(1, j)
                        f_Permuted(i)(1, j) = tempDec
                    End If
     
                    Str(j + 1) = j + 1 & ")" & "	" & f_Permuted(i)(0, j) & "	" & f_Permuted(i)(1, j)
                Next j                                                                                                  'End of Permutation
     
                Dim tmpTxt As New TextBox With {.Lines = Str}
                txtStr.Text = txtStr.Text &∓ vbCrLf & vbCrLf & "Permutation No: " & i + 1 & vbCrLf & tmpTxt.Text
     
            Next i                                                                                                      '/End of Main Loop
     
            f_Permuted_o = f_Permuted
     
            txtStr.Text = txtStr.Text.Substring(4)                                                                      'Saving Permutation to Text
            WriteText(My.Computer.FileSystem.SpecialDirectories.Desktop & "\Permuted Samples.txt", txtStr.Text)
     
            For i As Integer = 0 To T_Repetition - 1                                                                    'Saving the Indices to Text
                txtIndices.Text = txtIndices.Text & "	" & "T" & i + 1
            Next i
            For i As Integer = 0 To n_NumberOfErrors - 1
                txtIndices.Text = txtIndices.Text & vbCrLf & i + 1 &∓ ")"
                For j = 0 To T_Repetition - 1
                    txtIndices.Text = txtIndices.Text & "	" & CType(G_PermutationIndices(i, j), Integer) * -1
                Next
            Next
            WriteText(My.Computer.FileSystem.SpecialDirectories.Desktop & "\Permutation Indices.txt", txtIndices.Text)  '/End of Indices Save
     
     
        End Sub
     
    End Module

  •  04-01-2012, 18:44 68806 σε απάντηση της 68762

    Απ: Array πρόβλημα...

    Απ' ότι καταλαβαίνω θέλεις να κάνεις αλλάξεις την σειρά των στοιχείων του αρχικού πίνακα σε κάποιον άλλον. Δεν έχω κάτι συγκεκριμένο να σου προτείνω αλλά κάποιες επισημάνσεις που ίσως σε βοηθήσουν.

     

    1
     
    ReDim f_DataSet(1, n_NumberOfErrors) ' Μήπως θέλεις να πεις n_NumberOfErrors - 1 ?

     

    1
    2
    3
    4
     
    f_Permuted(i) = f_DataSet ' Εδώ δεν παίρνεις κόπια του f_Dataset αλλά την διεύθυνση του.
                ' Δηλαδή κάθε φορά που αλλάζεις μία τιμη στο f_Permuted(i) θα αλλάζει και η τιμή του αντίστοιχου στοιχείου στο f_Dataset και το αντίθετο.
                ' Στην συγκεκριμένη περίπτωση κάθε row του f_Permuted (f_Permuted(0), f_Permuted(1), f_Permuted(2), f_Permuted(3) κλπ) θα σου δείχνουν στις ίδιες τιμές.
                ' Τα Arrays είναι reference types.


     

    1
    2
    3
    4
     
                        ' Εδώ που κάνεις το swap δεν αλλάζει μόνο το f_Permuted αλλά και το f_DataSet.
                        ' Με αποτέλεσμα όταν ξαναπαίρνεις τις τιμές του f_DataSet να παίρνεις τις τιμές του τελευταίου permutation στην ουσία και όχι τις αρχικές.
                        f_Permuted(i)(0, j) = f_Permuted(i)(1, j)
                        f_Permuted(i)(1, j) = tempDec
  •  05-01-2012, 00:56 68812 σε απάντηση της 68806

    Απ: Array πρόβλημα...

    omg!

    Δεν θέλω refference, θέλω να δημιουργώ (n_NumberOfErrors -1) διαφορετικά arrays τα οποία θα αρχίζουν όλα με τις τιμές του "f_DataSet"

    Το f_DataSet δεν θα πρέπει να αλλάζει σε καμία περίπτωση...

    ' Μήπως θέλεις να πεις n_NumberOfErrors - 1 ?

    Ναι, το πρόσεξα κι εγώ και το είχα αλλάξει στον κώδικά μου :Ρ


    Αλλά το άλλο με το ότι είναι refference δεν το ήξερα.. Στο μυαλό μου ήταν τόσο καθαρά τα πράγματα

    Κατάλαβες όμως τι ήθελα να κάνω,

    πως μπορεί να γίνει αυτό? Πως να έχω ένα αρχικό Dataset και όλα τάλλα νάναι με τυχαίες αλλαγές?


  •  05-01-2012, 20:27 68819 σε απάντηση της 68812

    Απ: Array πρόβλημα...

    Θα πρέπει να κάνεις Copy τα Elements του ενός στο άλλο εφόσον χρησιμοποιείς Jagged. Γιά κάθε f_Permuted(i) φτιάξε ένα καινούργιο (κενό) array και χρησιμοποίησε την Array.Copy method ή κάνε f_Dataset.Clone. Με αυτόν τον τρόπο δεν θα αλλάζουν οι τιμές του αρχικού Dataset.
  •  05-01-2012, 22:57 68827 σε απάντηση της 68819

    Απ: Array πρόβλημα...

    Υπάρχει κάποια εντολή ή function που να το κάνει αυτό?

    Δεν νομίζω να μπορώ να γράψω f_Permuted(i) = new f_DataSet ή f_Permuted(i) = new Array(1,n), ε?


  •  08-01-2012, 21:45 68869 σε απάντηση της 68827

    Απ: Array πρόβλημα...

    Μπορείς να το κάνεις με έναν από τους δύο παρακάτω τρόπους. Στην περίπτωσή σου κάνουν copy "πραγματικό" γιατί τα στοιχεία του array που έχεις είναι value types. Όταν όμως τα τα elements είναι reference types ή περιέχουν άλλα ref types τα πράγματα δεν είναι τόσο απλά. Δες τα παρακάτω παραδείγματα και διάβασε προσεκτικά το Documentation στο MSDN.

     

    1
    2
    3
    4
    5
    6
     
                ' Μπορείς έτσι
                f_Permuted(i) = New Decimal(1, n_NumberOfErrors - 1) {}
                Array.Copy(f_DataSet, f_Permuted(i), f_DataSet.Length)
    
                ' Ή έτσι
                f_Permuted(i) = DirectCast(f_DataSet.Clone, Decimal(,))

     

    Value Types and Reference Types

     

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
     
        Private Sub mitsos() ' Το Ελληνικό foo
            Dim AR(0) As A
            Dim BR(0) As A
            Dim pA As New A With {.i = 100}
    
            AR(0) = pA
    
            Array.Copy(AR, BR, 1) ' Swallow Copy
    
            AR(0).i = 300 ' Εφόσον τα elements του AR και του BR Δείχνουν στο ίδιο Object οι τιμές του i θα αλλάζουν και στα δύο arrays.
    
            MessageBox.Show(BR(0).i.ToString)
    
            ' TODO δοκίμασέ το και με Structure
        End Sub
    
        ' A class is a Reference Type
        Private Class A
            Public i As Integer
        End Class
    
        '' A Struct is a Value Type
        'Private Structure A
        '    Public i As Integer ' Value Type
        'End Structure

     

     

  •  08-01-2012, 22:13 68870 σε απάντηση της 68869

    Απ: Array πρόβλημα...

    A ναι, το DirectCast το θυμάμαι, είναι σαν το Ctype.

    το New Decimal μου έκανε εντύπωση! αλλά δεν τα πάω καλά με τα άγκυστρα "{" και "}", δεν ξέρω πως χρησιμοποιούνται. 


    Θα χρησιμοποιήσω το "f_Permuted(i) = DirectCast(f_DataSet.Clone, Decimal(,))" για να λύσω το πρόβλημά μου,

    και θα δοκιμάσω εκτενώς το κώδικα για το Structure και το refference να ξεμπλέξω λίγο στο μυαλό μου τι γίνεται.


    ευχαριστώ πάρα πολύ Libra Storm, να'σαι καλα!


  •  13-01-2012, 20:26 68908 σε απάντηση της 68870

    Απ: Array πρόβλημα...

    Συνεχίζω να έχω το ίδιο πρόβλημα (βέβαια δεν είμαι πια μέσα στην άγνοια του "γιατί γίνεται αυτό??") αλλά δεν λύθηκε όμως το πρόβλημα.

    Έκανα την απαραίτητη αλλαγή απο "f_Permuted(i) = f_DataSet.Clone" σε "f_Permuted(i) = DirectCast(f_DataSet.Clone, Double()())" αλλά αντί να κάνει κάθε φορά διαφορετικό "κλόνο", έχει ένα και γίνεται ακριβώς το ίδιο με όταν δεν το χρησιμοποιούσα..

    δωκίμασα να βάλω new "DirectCast(f_DataSet.Clone, Double()())", "f_Permuted(i) = New Double()()" και τέτοια αλλά πάλι χωρίς επιτυχία...


    Χρειάζομαι μια άλλη ιδέα.

    Θέλω σε κάθε επανάληψη να δημιουργήτε ένα καινούργιο array ίδιο με το αρχικό. Αυτό... φαίνεται τόσο απλό αλλά είναι σχεδόν ακατόρθωτο Οο.


    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
     
    Imports STATCONNECTORSRVLib
    
    Module modFunctions
        Const SIZE_OF_DOUBLE = 8
    
        Public Rdo As New StatConnector
        Dim txtf_Permuted As New TextBox
    
        Dim RandomClass As New Random()
        Dim RandomNumber As Integer
        Public Sub TwoPairedSamplesPermutation(ByVal f_DataSet()() As Double, ByVal T_Repetition As Integer, ByVal n_NumberOfErrors As Integer, ByRef G_PermutationIndices(,) _
        As Boolean, ByRef f_Permuted_o()()() As Double, ByRef MaximumVerticalDeviation() As Double, ByRef pValues() As Boolean, ByRef pValueRecNumerator As Double, ByVal MaxVerticalDevMainSample As Double)
            'Initialization
            ReDim G_PermutationIndices(n_NumberOfErrors - 1, T_Repetition - 1)
            ReDim MaximumVerticalDeviation(T_Repetition - 1)
            ReDim pValues(T_Repetition - 1)
    
            pValueRecNumerator = 0
            Dim f_Permuted(T_Repetition - 1)()() As Double
            Dim txtIndices As New TextBox
            '/Initialization
    
            Dim strMaxVerticalDev As String = ""
            For i As Integer = 0 To T_Repetition - 1                                                                                'For every repetition
    
                Dim Strf_Permuted(n_NumberOfErrors) As String
                Strf_Permuted(0) = "	" & "V1" & "	" & "V2"
    
                f_Permuted(i) = DirectCast(f_DataSet.Clone, Double()())
    
                For j = 0 To n_NumberOfErrors - 1                                                                                   'For Rows.Length
                    RandomNumber = RandomClass.Next(2)
    
                    If RandomNumber = 0 Then
                        G_PermutationIndices(j, i) = False
                        'Do not permute!
    
                        My.Computer.Clipboard.SetText("0" & "	" & f_Permuted(i)(0)(j) & "	" & f_Permuted(i)(1)(j))
                        MsgBox("0" & vbCrLf & f_Permuted(i)(0)(j) & " | " & f_Permuted(i)(1)(j))
    
                    Else
                        G_PermutationIndices(j, i) = True
                        Dim tempDec As Double = f_Permuted(i)(0)(j)                                                                 'Permutation..
                        f_Permuted(i)(0)(j) = f_Permuted(i)(1)(j)
                        f_Permuted(i)(1)(j) = tempDec
    
                        My.Computer.Clipboard.SetText("1" & "	" & f_Permuted(i)(0)(j) & "	" & f_Permuted(i)(1)(j))
                        MsgBox("1" & vbCrLf & f_Permuted(i)(0)(j) & " | " & f_Permuted(i)(1)(j))
                    End If
    
                    Strf_Permuted(j + 1) = j + 1 & ")" & "	" & f_Permuted(i)(0)(j) & "	" & f_Permuted(i)(1)(j)
                Next j                                                                                                              'End of Permutation
    
                Dim V1(n_NumberOfErrors - 1), V2(n_NumberOfErrors - 1) As Double
                Buffer.BlockCopy(f_Permuted(i)(0), 0, V1, 0, n_NumberOfErrors * SIZE_OF_DOUBLE)
                Buffer.BlockCopy(f_Permuted(i)(1), 0, V2, 0, n_NumberOfErrors * SIZE_OF_DOUBLE)
    
                Rdo.SetSymbol("permutationset1", V1)
                Rdo.SetSymbol("permutationset2", V2)
    
                MaximumVerticalDeviation(i) = CType(Rdo.Evaluate("ks.test(permutationset1, permutationset2)$statistic"), Double)
                strMaxVerticalDev &= "  " & String.Format("{0:n1}", MaximumVerticalDeviation(i))
    
                If MaximumVerticalDeviation(i) >= MaxVerticalDevMainSample Then
                    pValues(i) = True
                    pValueRecNumerator += 1
                Else
                    pValues(i) = False
                End If
    
                Dim tmpTxt As New TextBox With {.Lines = Strf_Permuted}
                txtf_Permuted.Text = txtf_Permuted.Text & vbCrLf & vbCrLf & "Permutation No: " & i + 1 & vbCrLf & tmpTxt.Text
    
            Next i                                                                                                                      '/End of Main Loop
    
            f_Permuted_o = f_Permuted
    
            strMaxVerticalDev = "Maximum Vertical Deviation:" & vbCrLf & strMaxVerticalDev.Substring(2)
            frmMain.txtResults.Text &= vbCrLf & vbCrLf & strMaxVerticalDev
            WriteText(My.Computer.FileSystem.SpecialDirectories.Desktop & "\Maximum Vertical Deviation.txt", strMaxVerticalDev)
            txtf_Permuted.Text = txtf_Permuted.Text.Substring(4)                                                                        'Saving Permutation to Text
            frmMain.txtResults.Text &= vbCrLf & vbCrLf & "Permutation Samples:" & vbCrLf & vbCrLf & txtf_Permuted.Text
            WriteText(My.Computer.FileSystem.SpecialDirectories.Desktop & "\Permuted Samples.txt", txtf_Permuted.Text)
    
            For i As Integer = 0 To T_Repetition - 1                                                                                    'Saving the Indices to Text
                txtIndices.Text = txtIndices.Text & "	" & "T" & i + 1
            Next i
            For i As Integer = 0 To n_NumberOfErrors - 1
                txtIndices.Text = txtIndices.Text & vbCrLf & i + 1 & ")"
                For j = 0 To T_Repetition - 1
                    txtIndices.Text = txtIndices.Text & "	" & CType(G_PermutationIndices(i, j), Integer) * -1
                Next
            Next
    
            frmMain.txtResults.Text &= vbCrLf & vbCrLf & txtIndices.Text
            WriteText(My.Computer.FileSystem.SpecialDirectories.Desktop & "\Permutation Indices.txt", txtIndices.Text)                  '/End of Indices Save
    
    
        End Sub
    
    End Module


  •  13-01-2012, 22:57 68909 σε απάντηση της 68908

    Απ: Array πρόβλημα...

    Μα δεν έχει καμία σχέση το

    f_Permuted(i) = DirectCast(f_DataSet.Clone, Decimal(,))

    Με το

    f_Permuted(i) = DirectCast(f_DataSet.Clone, Double()())

    Και δεν αναφέρομαι στο Double αλλά στο ότι στην 1η περίπτωση έχεις Array of (2 Dimensional) Arrays ενώ στην 2η έχεις Arrays of Arrays of Arrays. Στην 1η περίπτωση θα σου δουλέψει ενώ στην δεύτερη όχι (υπάρχει τρόπος να δουλέψει και έτσι όπως το έγραψες, αλλά θα σου πρότεινα να το κάνεις με τον 1ο τρόπο που είχες φτιάξει). Το παρακάτω παράδειγμα δεν δουλεύει σωστά:

     

    1
    2
    3
    4
    5
    6
    7
    8
    9
     
            Dim f_Dataset()() As Double = New Double(0)() {New Double() {1.0#, 2.0#, 3.0#}} ' ή Dim f_Dataset()() As Double = New Double(0)() {({1.0#, 2.0#, 3.0#})}
            Dim f_Permuted(1)()() As Double
    
            f_Permuted(0) = DirectCast(f_Dataset.Clone, Double()())
            f_Permuted(1) = DirectCast(f_Dataset.Clone, Double()())
    
            f_Permuted(0)(0)(0) = 1000D
    
            MessageBox.Show(f_Permuted(1)(0)(0).ToString) ' Δεν έχουμε copy εσωτερικά αλλά το ίδιο Array.
  •  13-01-2012, 23:33 68910 σε απάντηση της 68909

    Απ: Array πρόβλημα...

    Ναι, πράγματι, είναι διαφορετικό το ένα απο το άλλο.


    Επειδή όμως έχω πρόβλημα επικοινωνίας μεταξύ VB και R χρειάστηκε να κάνω αυτό το πράγμα (δλδ array of array of array).

    Όταν δίνω στην R ένα array (χ,ν) με decimal η R παίρνει ένα array με άκυρα πράγματα, ενώ όταν το δίνω με array of array σε 2 1-dimentional arrays το δέχεται εντάξει. Γιαυτό και το άλλαξα.. καλύτερο ήταν με ένα 2-dimentional array παρά έτσι.. αλλά περιορισμός του ενδιάμεσου προγράμματος (διασύνδεσησ R <-> VB).


    Anyway, είπες οτι υπάρχει τρόπος να πετύχω αυτό που θέλω και έτσι όπως το έχω γράψει τώρα...

    Πες μου τον σε παρακαλώ γιατί προσωπικά, δεν μπορώ να καταλάβω τι άλλο θέλει..


    Και 2 άσχετες ερωτήσεις, απλώς επειδή πρώτη φορά είδα το "= New Double(0)() {New Double() {1.0#, 2.0#, 3.0#}}" και μου έκανε μεγάλη έκπληξη

    1η άσχετη ερώτηση: Σε αυτο το παράδειγμα, απότι καταλαβαίνω τουλάχιστον, δίνεις στο "array of array" rank=1, και length=3 με τις 3 τιμές αυτές ε?

    2η άσχετη ερώτηση: Τι είναι η δίεση στο τέλος? Τελευταία φορά θυμάμαι είχες βάλει ένα D. Ίδιο είναι?

    br
  •  14-01-2012, 17:57 68916 σε απάντηση της 68910

    Απ: Array πρόβλημα...

    επειδή πρώτη φορά είδα το "= New Double(0)() {New Double() {1.0#, 2.0#, 3.0#}}" και μου έκανε μεγάλη έκπληξη.

    - Θέμα σύνταξης είναι πιό πολύ παρά θέμα λειτουργικότητας.

    1η άσχετη ερώτηση: Σε αυτο το παράδειγμα, απότι καταλαβαίνω τουλάχιστον, δίνεις στο "array of array" rank=1, και length=3 με τις 3 τιμές αυτές ε?

    - Χρησιμοποίησε το Rank και Length Properties στο Debug και θα δεις τι συμβαίνει.

    2η άσχετη ερώτηση: Τι είναι η δίεση στο τέλος? Τελευταία φορά θυμάμαι είχες βάλει ένα D. Ίδιο είναι?

    - D πάει να πει ότι το νούμερο είναι Decimal, ενώ η δίεση Double. Habit είναι στις συγκεκριμένες περιπτώσεις, σε άλλες όμως δεν μπορείς να το αποφύγεις.

     

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
     
        Private Sub AButtonClick(sender As System.Object, e As System.EventArgs) Handles AButton.Click
            Dim f_Dataset()() As Double = New Double()() _
                                            {
                                                New Double() {1.0#, 2.0#, 3.0#}
                                            }
            Dim f_Permuted()()() As Double = New Double()()() _
                                            {
                                                New Double()() _
                                                    {
                                                        DirectCast(f_Dataset(0).Clone, Double())
                                                    },
                                                New Double()() _
                                                    {
                                                        DirectCast(f_Dataset(0).Clone, Double())
                                                    }
                                            }
    
            f_Permuted(0)(0)(0) = 1000.0#
    
            MessageBox.Show(f_Permuted(1)(0)(0).ToString)
    
            Me.Way1()
        End Sub
    
        Sub Way1()
            Dim f_Dataset()() As Double = {({1.0#, 2.0#, 3.0#})}
            Dim f_Permuted()()() As Double = {
                                                ({DirectCast(f_Dataset(0).Clone, Double())}),
                                                ({DirectCast(f_Dataset(0).Clone, Double())})
                                             }
    
            f_Permuted(0)(0)(0) = 1000.0#
    
            MessageBox.Show(f_Permuted(1)(0)(0).ToString)
    
            Me.Way2()
        End Sub
    
        Sub Way2()
            Dim f_Dataset()() As Double = {({1.0#, 2.0#, 3.0#})}
            Dim f_Permuted()()() As Double = {
                                                New Double(0)() {},
                                                New Double(0)() {}
                                             }
    
            f_Permuted(0)(0) = DirectCast(f_Dataset(0).Clone, Double())
            f_Permuted(1)(0) = DirectCast(f_Dataset(0).Clone, Double())
    
            f_Permuted(0)(0)(0) = 1000.0#
    
            MessageBox.Show(f_Permuted(1)(0)(0).ToString)
    
            Me.Way3()
        End Sub
    
        Sub Way3()
            Dim f_Dataset()() As Double = {({1.0#, 2.0#, 3.0#})}
            Dim f_Permuted(1)()() As Double
    
            f_Permuted(0) = New Double(0)() {}
            f_Permuted(1) = New Double(0)() {}
    
            f_Permuted(0)(0) = DirectCast(f_Dataset(0).Clone, Double())
            f_Permuted(1)(0) = DirectCast(f_Dataset(0).Clone, Double())
    
            f_Permuted(0)(0)(0) = 1000.0#
    
            MessageBox.Show(f_Permuted(1)(0)(0).ToString)
        End Sub
    
        Sub mitsos()
            ' http://msdn.microsoft.com/en-us/library/s9cz43ek(v=VS.100).aspx
    
            'Dim d As Decimal = 9999999999999999999 ' Overflow
            Dim d1 As Decimal = 9999999999999999999D ' OK
            Dim d2 As Decimal = 9999999999999999999UL ' OK
            Dim f As Single = 1.0E+19!
        End Sub

     

     

     

     

  •  14-01-2012, 22:13 68924 σε απάντηση της 68916

    Απ: Array πρόβλημα...

    Έκανα τις εξής αλλαγές:

    Έβαλα

    1
    2
    3
     
            For i = 0 To T_Repetition - 1
                f_Permuted(i) = New Double(1)() {}
            Next
    κάτω απο τον ορισμό του f_permuted, αφήνοντας τον ορισμό f_permuted  ως έχειν Dim f_Permuted (T_Repetition - 1)()() As Double)

    και μετά έκανα τις αναγκαίες αλλαγές στο παράδειγμά σου:

    1
    2
     
                f_Permuted(i)(0) = DirectCast(f_DataSet(0).Clone, Double())
                f_Permuted(i)(1) = DirectCast(f_DataSet(1).Clone, Double())
    και δούλεψε μια χαρούλα!!

    Αρχικά πήρα το way2, και το άλλαξα έτσι

    1
    2
    3
    4
     
            Dim f_Permuted()()() As Double = {
                                                New Double(1)() {},
                                                New Double(1)() {}
                                             }

    Άλλα μπορούσε να κάνει μόνο 2 repetitions.

    Μετά έβαλα ένα ακόμα "New Double (1)(){}" και είδα ότι μπορούσε να κάνει 3 repetitions οπότε τόπιασα το νόημα :Ρ


    1000 ευχαριστώ Libra Storm. Ξέρω ότι έχει βαρεθεί να το ακούς αλλά το αξίζεις. Ότι και να πω είναι λίγο



Προβολή Τροφοδοσίας RSS με μορφή XML
Με χρήση του Community Server (Commercial Edition), από την Telligent Systems