les chaînes peuvent être indexés directement sans la construction d'une séquence à partir de là et de prendre le premier de la séquence.
(= (nth "clojure" 0) \c)
=> true
nth des appels par le biais de ce code java:
static public Object nth(Object coll, int n){
if(coll instanceof Indexed)
return ((Indexed) coll).nth(n); <-------
return nthFrom(Util.ret1(coll, coll = null), n);
}
efficacement lit le caractère directement.
premier appel grâce à ce code java:
static public Object first(Object x){
if(x instanceof ISeq)
return ((ISeq) x).first();
ISeq seq = seq(x); <----- (1)
if(seq == null)
return null;
return seq.first(); <------ (2)
}
qui construit une seq pour la chaîne (1) (bâtiment seq est vraiment très rapide) et prend alors le premier élément de cette séquence (2). après le retour de la seq est des ordures.
Seqs sont clairement les plus idomatic moyen d'accéder à quelque chose séquentielle en clojure et je ne dénigre pas du tout. Il est intéressant d'être au courant de ce que vous créez lorsque. commutation de tous vos appels à l' first
appels d' nth
est susceptible d'être un cas d'optimisation prématurée. si vous voulez le 100e char dans la chaîne, je voudrais suggérer à l'aide d'un accès indexé fonction comme nième
en bref: ne pas transpirer les petites choses :)