2016-06-21 10 views
-2

Ich habe einen Vektor von jedem, sagen A = Any[[1,2],[3,4]]. Dann möchte ich ein neues Array erstellen, sagen wir C::Vector{Any} basierend auf meinen Elementen in A, aber ohne tatsächlich zu ändern A. Ich habe versucht, eine Kopie zu erstellen, B = copy(A), und Änderungen an Elementen in B vorzunehmen, um dann zu C hinzuzufügen, so dass sich A nicht ändert, aber A ändert sich ständig. Jetzt könnten Sie mich bitten, tiefe Kopie zu verwenden, aber das möchte ich nicht, weil ich immer noch möchte, dass die unveränderten Elemente in C denen in A entsprechen, dh A[1] == C[1] sollte true zurückgeben, wenn ich das erste Element von A in C ohne hinzufüge Änderungen vornehmen. C könnte beispielsweise Any[[1,2],[3,4,5]] sein.Wie ändert man den Vektor des benutzerdefinierten Typs, ohne den ursprünglichen Vektor zu ändern?

Also wie erstelle ich C ohne Änderung A überhaupt, und auch sicherstellen, dass die Gleichheit der unveränderten Elemente halten?

+1

Ich verstehe nicht. Wenn Sie 'C = deepcopy (A)' verwenden, dann haben unveränderte Elemente in 'C' * eine Gleichheit mit entsprechenden Elementen in' A'. Zum Beispiel: 'A = Beliebig [[1,2], [3,4]]; C = Tiefenkopie (A); C [2] = [4,5]; A [1] == C [1] '<- gibt' true' zurück. –

+0

Ich stimme zu, dass diese Anfrage sich widerspricht. Möchten Sie, dass Änderungen an den Elementen gleich bleiben oder nicht? Kannst du die Frage klären? – StefanKarpinski

+0

Entschuldigung, wenn meine Frage verwirrend war. Ich habe es jetzt funktioniert. Vielen Dank für Ihre Antwort! – Sapna

Antwort

1

Versuchen Sie similar(A). Es initialisiert ein neues Array basierend auf den Eigenschaften des Arrays im Argument.

Jedenfalls mit copy(A) wie Sie auf dem Post erwähnen es funktioniert für mich. Ich muss erwähnen, dass ich v0.5-dev Version von Julia verwende.

Ich sollte sagen, dass Ihre Frage ist nicht ganz klar, aber wenn mit meiner Antwort ist genug, dann habe glückliche Codierung. Wenn nicht, würde ich versuchen, klarer zu antworten.