2016-11-30 3 views
3

Karte unter mir ein Array von Arrays, genannt y:Wie der Index des Iterators wissen, wann in Julia

y=Array(Vector{Int64}, 10) 

die im Grunde eine Liste von 1-dimensionaler Arrays (10 von ihnen) ist, und jedes 1-dimensionales Array aufweist Länge 5. Nachfolgend ist ein Beispiel davon, wie sie initialisiert werden:

for i in 1:10 
    y[i]=sample(1:20, 5) 
end 

jedes 1-dimensionales Feld enthält 5 zufällig abgetastet ganze Zahlen zwischen 1 zu 20.

Gerade jetzt beantrage ich eine Map-Funktion, wo für jede dieser 1-dimensionalen Arrays in y, umfasst nicht die Zahlen 1-20:

map(x->setdiff(1:20, x), y) 

aber ich möchte sicherstellen, wenn die Funktion angewendet bis y[i], wenn die Ausgabe setdiff(1:20, y[i])i enthält, ist i von den Ergebnissen ausgeschlossen. in anderen Worten: Ich möchte eine Funktion, die

setdiff(deleteat!(Vector(1:20),i) ,y[i]) 

aber mit map wie

funktioniert.

Hauptsächlich meine Frage ist, ob Sie auf den Index in der map Funktion zugreifen können.

P.S, ich weiß, wie man es mit comprehensions macht, wollte ich wissen, ob es möglich ist, es mit Karte zu tun.

Verständnis Art und Weise:

[setdiff(deleteat!(Vector(1:20), index), value) for (index,value) in enumerate(y)] 

Antwort

7

Wie das?

map(x -> setdiff(deleteat!(Vector(1:20), x[1]),x[2]), enumerate(y)) 

Für Ihr Beispiel ergibt dies:

[2,3,4,5,7,8,9,10,11,12,13,15,17,19,20]
[1,3,5,6,7,8,9,10,11,13,16,17,18,20]
....
[1,2,4,7,8, 10,11,12,13,14,15,16,17,18]
[1,2,3,5,6,8,11,12,13,14,15,16,17,19,20 ]

+0

Ja! das funktioniert gut. Vielen Dank –

Verwandte Themen