2017-10-02 6 views
-2

Ich versuche, die Unterschiede zwischen zwei Arrays gleicher Länge in Ruby zu bekommen.Vergleiche Arrays mit Index Ruby

array1 = [1,2,3,4] 

array2 = [1,2,4,5] 

diffArray = [] 
diffArray = array1 - array2 # => [3] 

Aber ich möchte den Index speichern, bei denen die Unterschiede relativ auftreten zu array1 oder array2. Zum Beispiel würde Ich mag diffArray als

#diffArray => [nil,nil,3,nil] oder #diffArray => ["","",3,""]

Gibt es eine Möglichkeit, diese gerettet werden zu tun in Ruby?

+0

'array1 - array2 # => [3]' –

+1

@moveson ist nicht der einzige, der ‚doesn Ich verstehe deine Frage nicht. Als du seinen Kommentar gesehen und geantwortet hast, warst du verpflichtet, die Frage zu klären, hast es aber nicht getan. Das verdient einen Abschlag von mir. –

Antwort

2

Ihre Frage ist nicht klar.

Wenn Sie in den Werte vonarray1 an den Positionen interessiert sind, an denen die Werte nicht übereinstimmen, könnten Sie diese verwenden möchten:

array1 = [1,2,3,4] 
array2 = [1,2,4,5] 

array1.zip(array2).map { |a, b| a if a != b } 
#=> [nil, nil, 3, 4] 

Wenn Sie Indizes in den interessiert an die die Werte nicht übereinstimmen (Hinweis: Indizes beginnen bei 0 mitgezählt), versuchen Sie dies:

array1.zip(array2).map.with_index { |(a, b), i| i if a != b } 
#=> [nil, nil, 2, 3] 
+0

danke @spickermann. Wenn möglich, können Sie die Leistung für Ihre Antwort erklären – danynl

+2

Das OP bat darum, dass das Diff-Array die Indizes der Orte enthält, an denen die Elemente unterschiedlich waren. Das Beispiel des OP ist verwirrend, da das erste Array sequenzielle Zahlen sind und im zurückgegebenen Beispiel die zurückgegebenen Daten den letzten beiden Elementen im ersten Array entsprechen. @danynl Was willst du eigentlich zurückgeben? Wenn Sie Indizes wollen, sollte das Beispiel nicht [nil, nil, 2, 3] erfordern? – moveson

+0

@moveson: Sie haben Recht, die Frage ist ein wenig verwirrend, weil der Wortlaut und die Beispiele nicht wirklich zusammenpassen. Ich habe meine Antwort aktualisiert, um das zu beantworten. – spickermann

1

Es ist nicht klar, was der OP will, aber wenn die requ irement ist ein Array einen Index enthält, anstatt die Elemente eines der Arrays, dann wollen wir:

array1 = [1,2,3,4] 
array2 = [1,2,4,5] 

(0...array1.size).map { |index| index if array1[index] != array2[index] } 
#=> [nil, nil, 2, 3]