Voici quelques opérations simples de
map `` `` filter
reduction``` qui sont souvent utilisées dans les opérations de liste dans chaque langue.
Java est redondant, n'est-ce pas? Ruby et Haskell sont très concis.
Cependant, comme j'utilise Java dans mon travail quotidien, je ne connais pas grand-chose aux autres langages, donc
Il existe peut-être une manière plus concise de l'écrire.
Voici un exemple simple de.
D'ailleurs, il semble qu'il n'est pas souvent fixé d'initialiser la liste dans les affaires. Normalement, les données de liste sont générées par la méthode d'usine et référencées. Cependant, j'effectue parfois l'initialisation suivante en tant que données de test dans les tests.
Java
List<Integer> xs = Arrays.asList(1, 2, 3, 4, 5);
//Ou@S'il s'agit de Java 10 ou version ultérieure, comme enseigné par saka1029
var xs = List.of(1, 2, 3, 4, 5);
//Il existe également un moyen d'utiliser une telle liste infinie. Ne faites-vous pas cela en affaires?
//Valeur de départ de l'extérieur, fonction,Vous pouvez le faire en entrant la valeur limite.
xs = Stream.iterate(1, i -> i + 1).limit(5).collect(toList())
Ruby
xs = [1, 2, 3, 4, 5]
#En fait, ce qui précède semble être un mauvais exemple,
# @Les suivants enseignés par scivola sont bons pour l'initialisation.
xs = [*1..5]
Python
xs = [1, 2, 3, 4, 5]
Haskell
xs = [1, 2, 3, 4, 5]
--Ou
xs = [1..5]
Clojure
(def xs '(1 2 3 4 5))
;Ou@Comment Lagenorhynque a commenté
(def xs (range 1 (inc 5)))
On suppose que cette liste a déjà été créée ci-dessous.
Le résultat pour chaque langue est `` [2, 4, 6, 8, 10] ''. La fonction d'impression est omise.
Java
xs.stream().map(i -> i * 2).collect(toList());
Ruby
xs.map {|i| i * 2}
Python
list(map(lambda i: i * 2, xs))
#Il est peut-être normal d'utiliser la notation d'inclusion de liste en Python pour donner cette réponse.
[i * 2 for i in xs]
Haskell
map (*2) xs
Clojure
(map (fn [n](* n 2)) xs)
;Ou@Ce que m'a dit lagenorhynque. Celui-ci est simple et sympa!
(map #(* % 2) xs)
Le résultat est `` [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))
#Ce sera peut-être une notation d'inclusion de liste sans écrire comme ci-dessus.
[n for n in xs if n % 2 == 0]
Haskell
filter even xs
Clojure
(filter even? xs)
Le résultat est `` 15 ''.
Java
xs.stream().reduce(Integer::sum).orElse(0);
Ruby
xs.reduce(:+)
#Ou l.inject(:+)
#Lorsque vous n'utilisez pas, réduisez
xs.sum
Python n'était pas convivial car il n'y avait aucune importation de @shiracamus, alors je l'ai écrit.
Python
from functools import reduce
from operator import add
reduce(lambda a, b: a + b, xs)
#Lorsque vous n'utilisez pas, réduisez
sum(xs)
#Ou@J'ai appris de shiracamus,
reduce(add, xs)
Haskell
foldl (+) 0 xs
--Lorsque vous n'utilisez pas le pli
sum xs
Clojure
(reduce + xs)
;@Enseigné par lagenorhynque
(apply + xs)
;Le même résultat peut être obtenu en écrivant. Ce qui est fait en interne(+ 1 2 3 4 5)
;réduire est(+ (+ (+ (+ 1 2) 3) 4) 5)
c'est tout.
J'ai écrit pour une langue que j'ai étudiée jusqu'à présent, mais j'ai personnellement écrit Ruby, Clojure, que j'ai trouvé confortable </ b>. Je sens que le sentiment est similaire. (Parce que les deux auteurs aiment lisp?) Haskell est trop terrible et désagréable! Je pense (dans le bon sens) </ b>, mais est-ce amusant! </ B> Ruby, Clojure? Je ne sais pas pourquoi. De plus, Haskell a une façon de penser complètement différente des autres langues, il est donc difficile d'étudier.
Recommended Posts