Hier sind einige einfache Operationen von `` map````
filter `redu
, die häufig in Listenoperationen in jeder Sprache verwendet werden.
Java ist redundant, nicht wahr? Ruby und Haskell sind sehr prägnant.
Da ich jedoch in meiner täglichen Arbeit Java verwende, weiß ich nicht viel über andere Sprachen
Möglicherweise gibt es eine präzisere Möglichkeit, es zu schreiben.
Hier ist ein einfaches Beispiel für.
Übrigens scheint es nicht oft behoben zu sein, die Liste im Geschäft zu initialisieren. Normalerweise werden Listendaten von der Factory-Methode generiert und referenziert. Manchmal führe ich jedoch die folgende Initialisierung als Testdaten in Tests durch.
Java
List<Integer> xs = Arrays.asList(1, 2, 3, 4, 5);
//Oder@Wenn es Java 10 oder höher ist, wie von saka1029 gelehrt
var xs = List.of(1, 2, 3, 4, 5);
//Es gibt auch eine Möglichkeit, eine solche unendliche Liste zu verwenden. Tun Sie das nicht im Geschäft?
//Startwert von außen, Funktion,Sie können es schaffen, indem Sie den Grenzwert eingeben.
xs = Stream.iterate(1, i -> i + 1).limit(5).collect(toList())
Ruby
xs = [1, 2, 3, 4, 5]
#Eigentlich scheint das oben genannte ein schlechtes Beispiel zu sein,
# @Die folgenden von scivola gelehrten sind gut für die Initialisierung.
xs = [*1..5]
Python
xs = [1, 2, 3, 4, 5]
Haskell
xs = [1, 2, 3, 4, 5]
--Oder
xs = [1..5]
Clojure
(def xs '(1 2 3 4 5))
;Oder@Wie lagenorhynque kommentierte
(def xs (range 1 (inc 5)))
Es wird davon ausgegangen, dass diese Liste bereits unten erstellt wurde.
Das Ergebnis für jede Sprache ist "[2, 4, 6, 8, 10]". Die Druckfunktion entfällt.
Java
xs.stream().map(i -> i * 2).collect(toList());
Ruby
xs.map {|i| i * 2}
Python
list(map(lambda i: i * 2, xs))
#Vielleicht ist es normal, die Listeneinschlussnotation in Python zu verwenden, um diese Antwort zu geben.
[i * 2 for i in xs]
Haskell
map (*2) xs
Clojure
(map (fn [n](* n 2)) xs)
;Oder@Was Lagenorhynque mir erzählt hat. Dieser ist einfach und nett!
(map #(* % 2) xs)
Das Ergebnis ist `[2, 4]`
.
Java
xs.stream().filter(n -> n % 2 == 0).collect(toList());
Ruby
xs.select(&:even?)
Python
list(filter(lambda n: n % 2 == 0, xs))
#Wahrscheinlich denke ich, dass es eine Listeneinschlussnotation sein wird, ohne wie oben zu schreiben.
[n for n in xs if n % 2 == 0]
Haskell
filter even xs
Clojure
(filter even? xs)
Das Ergebnis ist `15
`.
Java
xs.stream().reduce(Integer::sum).orElse(0);
Ruby
xs.reduce(:+)
#Oder l.inject(:+)
#Bei Nichtverwendung reduzieren
xs.sum
Python war unfreundlich, weil es keinen Import von @shiracamus gab, also habe ich es geschrieben.
Python
from functools import reduce
from operator import add
reduce(lambda a, b: a + b, xs)
#Bei Nichtverwendung reduzieren
sum(xs)
#Oder@Ich habe von Shiracamus gelernt,
reduce(add, xs)
Haskell
foldl (+) 0 xs
--Wenn Sie Fold nicht verwenden
sum xs
Clojure
(reduce + xs)
;@Gelehrt von lagenorhynque
(apply + xs)
;Das gleiche Ergebnis kann durch Schreiben erhalten werden. Was wird intern gemacht?(+ 1 2 3 4 5)
;reduzieren ist(+ (+ (+ (+ 1 2) 3) 4) 5)
das ist alles.
Ich habe für eine Sprache geschrieben, die ich bisher gelernt habe, aber ich persönlich habe Ruby, Clojure, geschrieben, was ich als angenehm empfand </ b>. Ich fühle, dass das Gefühl ähnlich ist. (Weil beide Autoren Lisp mögen?) Haskell ist zu schrecklich und unangenehm! Ich denke (auf gute Weise) </ b>, aber macht es Spaß! </ B> Ruby, Clojure? Ich weiß nicht warum. Außerdem hat Haskell eine völlig andere Denkweise als andere Sprachen, so dass es schwierig ist, zu lernen.
Recommended Posts