Es gibt keinen Unterschied, tatsächlich map
ist es in C als rb_ary_collect
und implementiert enum_collect
(z. B. gibt es einen Unterschied zwischen map
einem Array und einer anderen Aufzählung, aber keinen Unterschied zwischen map
und collect
).
Warum beides map
und collect
in Ruby existieren? Die map
Funktion hat viele Namenskonventionen in verschiedenen Sprachen. Wikipedia bietet einen Überblick :
Die Kartenfunktion stammt ursprünglich aus funktionalen Programmiersprachen, wird heute jedoch auch in vielen prozeduralen, objektorientierten und multiparadigmatischen Sprachen unterstützt (oder kann definiert werden): In der Standardvorlagenbibliothek von C ++ wird sie transform
in C # (3.0) genannt LINQ-Bibliothek wird als Erweiterungsmethode bereitgestellt Select
. Map ist auch eine häufig verwendete Operation in Hochsprachen wie Perl, Python und Ruby. Die Operation wird map
in allen drei Sprachen aufgerufen . Ein collect
Alias für die Karte ist auch in Ruby (von Smalltalk) [Hervorhebung von mir] enthalten. Common Lisp bietet eine Familie von kartenähnlichen Funktionen. mapcar
Dasjenige, das dem hier beschriebenen Verhalten entspricht, heißt (-car, das den Zugriff mit der CAR-Operation anzeigt).
Ruby bietet Programmierern aus der Smalltalk-Welt einen Alias, um sich besser zu Hause zu fühlen.
Warum gibt es eine andere Implementierung für Arrays und Enums? Eine Aufzählung ist eine verallgemeinerte Iterationsstruktur, was bedeutet, dass Ruby auf keinen Fall vorhersagen kann, was das nächste Element sein kann (Sie können unendliche Aufzählungen definieren, siehe Prime für ein Beispiel). Daher muss eine Funktion aufgerufen werden, um jedes aufeinanderfolgende Element abzurufen (normalerweise ist dies die each
Methode).
Arrays sind die am häufigsten verwendete Sammlung, daher ist es sinnvoll, ihre Leistung zu optimieren. Da Ruby viel über die Funktionsweise von Arrays weiß, muss es nicht aufrufen, each
sondern kann nur eine einfache Zeigermanipulation verwenden, die erheblich schneller ist.
Ähnliche Optimierungen gibt es für eine Reihe von Array-Methoden wie zip
oder count
.
map
wird bei Code Golf bevorzugt .