[RUBY] Verwenden Sie die Permutationsmethode, damit alle Standardbenutzer aufeinander folgen

Einführung

Ich werde zum ersten Mal auf Qiita posten. Ich bin ein Anfänger. Wir würden uns freuen, wenn Sie auf Fehler im Wortlaut hinweisen könnten.

In dem erstellten Portfolio für Jobwechselaktivitäten wurden die Benutzer der ursprünglichen Daten dazu gebracht, in seeds.rb aufeinander zu folgen. Ich erhielt eine Antwort mit einer Codeüberprüfung von einem Ingenieur eines bestimmten Unternehmens. In Bezug auf diese seeds.rb wurde darauf hingewiesen, dass "die Logik ungewöhnlich schwer zu verstehen ist".

Seeds.rb vor der Änderung

Mit dem folgenden Code folgen die Standardbenutzer einander.

db/seeds_relationships.rb


19.times do |n| #Wiederholen Sie die Verarbeitung 19 Mal
  users = User.all #Weisen Sie den variablen Benutzern alle Benutzerobjekte zu
  user = users.find(n + 1) #Die von den variablen Benutzern angegebene ID (n)+1) Weisen Sie das Benutzerobjekt dem variablen Benutzer zu
  following = users[0..18] #1 von Array-Benutzern in folgenden Variablen~Ersetzen Sie bis zum 19. Benutzerobjekt
  following.shift(n + 1) #Ab dem Anfang des Arrays folgt mit der Shift-Methode(n+1)Ein Element loswerden
  followers = users[0..18] #1 der Array-Benutzer in den variablen Followern~Ersetzen Sie bis zum 19. Benutzerobjekt
  followers.shift(n + 1) #Vom Anfang des Arrays folgen Follower mit der Shift-Methode(n+1)Ein Element loswerden
  following.each { |followed| user.follow(followed) } #Jeder Benutzer, dessen Benutzer im folgenden Array enthalten ist(followed)Folgen
  followers.each { |follower| follower.follow(user) } #Jeder Benutzer, der in den Array-Followern enthalten ist(follower)Folgt dem Benutzer
end

Sie können es auf einen Blick sehen, aber es ist ungewöhnlich schwer zu verstehen.

Verwenden Sie die Array # -Permutation

Der Ingenieur wies wie oben darauf hin, Was ist Permutation? Ich dachte, und als ich es übersetzte, stellte ich fest, dass es "Ordnung" bedeutete.

Was ist eine Sequenz?

Dies ist die Anzahl der verschiedenen r Teile, die aus n verschiedenen Teilen entnommen und in einer Spalte angeordnet wurden. [High School Mathematik] Unterschiede in Reihenfolge und Kombination, die aus 1 ersichtlich sind

Es ist ein Typ wie AB, BA, BC, CB, AC, CA ().

Erstellen Sie eine Sequenz

[1, 2, 3].permutation do |x|
  p x
end

Die folgende Sequenz wird aus den Elementen im Array erstellt.

[1, 2, 3]
[1, 3, 2]
[2, 1, 3]
[2, 3, 1]
[3, 1, 2]
[3, 2, 1]

Durch Setzen von (n) nach der Permutation können Sie n verschiedene Elemente aus dem Array extrahieren und anordnen.

[1, 2, 3].permutation(2) do |x|
  p x
end
[1, 2]
[1, 3]
[2, 1]
[2, 3]
[3, 1]
[3, 2]

Quelle: Permutation erstellen

Modified seeds.rb

db/seeds_relationships.rb


users = User.all.to_a
users.permutation(2) do |n|
  n[0].follow(n[1])
end
  1. Benutzer folgt 2,3,4,5… zweiter Benutzer, Der zweite Benutzer folgt dem 1,3,4,5… zweiten Benutzer, Der dritte Benutzer folgt dem dritten Benutzer 1,2,4,5… und wird Ich konnte die Permutationsmethode verwenden, um alle Standardbenutzer aufeinander folgen zu lassen.

[Ergänzung] Seeds.rb zur einfacheren Anzeige

db/seeds_relationships.rb


users = User.all.to_a
users.permutation(2) do |user1, user2|
  user1.follow(user2)
end

Ich habe einen Kommentar erhalten und ihn korrigiert. Die Lesbarkeit ist ziemlich gut!

Umgebung

Recommended Posts

Verwenden Sie die Permutationsmethode, damit alle Standardbenutzer aufeinander folgen
Ich möchte eine andere Desinfektionsmethode als Ansicht verwenden.
Verwendung der link_to-Methode
Verwendung der include? -Methode
[Schienen] Verwendung der Kartenmethode
[Java] Verwendung der toString () -Methode
Wenn Sie die Methode außerhalb verwenden möchten
Ausgabe der Verwendung der Slice-Methode
Verwendung der replace () -Methode (Java Silver)
[Ruby-Grundlagen] Verwendung der Slice-Methode
Verwendung der Getter / Setter-Methode (in Objektorientierung)
Verhindern Sie, dass Sie zu den Post-Edit-Bildschirmen anderer Benutzer wechseln
Einfach zu bedienende array.map (&: Methode)
Verwenden Sie den Modifikator # isStatic, um festzustellen, ob die Methode [Reflection] statisch ist.
[Schienen] Verwenden Sie die Auswahlmethode nicht nur, um die Spalten einzugrenzen!
[Java] Ich habe versucht, mit der Grabmethode ein Labyrinth zu erstellen ♪