Antworten:
Angenommen, Sie haben ein x, das die IntoIterator-Eigenschaft implementiert, und Sie müssen eine Funktion f aufrufen, die den Index eines Elements und einen Verweis darauf verwendet. Die Standardmethode hierfür ist
x.iter().enumerate().map(f)
stattdessen kannst du tun
(0..).zip(x).map(f)
und ersparen sie sich nicht nur die ungewöhnlich lange aufzählung, sondern auch den aufruf zum iter!
Wenn Sie viele veränderbare Variablen benötigen, kann dies viel Platz verschwenden, indem Sie sie deklarieren und initialisieren, da für jede Variable das Schlüsselwort mut erforderlich ist und Sie nichts wie a = b = c = 0 tun können. Eine Lösung besteht dann darin, ein veränderliches Array zu deklarieren
let mut a=[0;5];
Sie geben jedes Mal 3 zusätzliche Bytes aus, wenn Sie diese gegen eine normale Variable verwenden:
a[0]+=1;
aber es kann sich oft noch lohnen.
Tupel für den gleichen Trick zu verwenden, ist oft eine noch bessere Option:
let mut t=(1,4,"this", 0.5, 'c');
Dies hat den Vorteil, dass bei jeder Verwendung im Vergleich zum Array ein Byte eingespart wird:
t.0=2
Es können auch verschiedene Typen verwendet werden. Andererseits sind mehr Zeichen für die Initialisierung erforderlich.
&str
nachString
Mach niemals diese:
s.to_string() // 13 bytes
s.to_owned() // 12 bytes
Das ist immer kürzer:
s.repeat(1) // 11 bytes
Wenn s
ist ein String-Literal:
format!(s) // 10 bytes
Beispiel: Verwenden Sie format!("")
anstelle von String::new()
, um 2 Bytes zu speichern.
Wenn die Typinferenz funktioniert:
s.into() // 8 bytes
Wenn Sie beispielsweise die Formatierung von Zeichenfolgen mit verwenden print!()
, können Sie sowohl nummerierte als auch nicht nummerierte Formatierer verwenden, um ein Byte pro Element für die Formatierung zu speichern:
Am besten anhand eines Beispiels:
fn main(){
print!("{}{}{}. Yes, {0}{}{2}. All you other{1}{2}s are just imitating.",
"I'm",
" Slim",
" Shady",
" the real");
}
Welche Ausgänge:
I'm Slim Shady. Yes, I'm the real Shady. All you other Slim Shadys are just imitating.
Die nicht nummerierten Formatierer werden den Elementen in der angegebenen Reihenfolge zugewiesen. Auf diese Weise können Sie den Index für diese Elemente überspringen. Beachten Sie, dass Sie nur ein nicht nummeriertes Formatierungsprogramm pro Element zum Formatieren verwenden können. Danach wird es aufgebraucht.
Nachdem ich verschiedene Dinge bedacht habe, denke ich, dass dies im Allgemeinen der kürzeste Weg ist, um eine Zeile abzurufen. Die Linie hat eine neue Linie. Sie kann durch Trimmen ( .trim()
) oder durch Schneiden entfernt werden.
let y=&mut"".into();std::io::stdin().read_line(y);
Für mehrere Zeilen kann ein lines
Iterator verwendet werden, die iterierte Zeile endet dann nicht in einer neuen Zeile. Ein glob Import wird Import benötigt BufRead
, benötigt für lines
für verfügbar sein StdinLock<'_>
Typ.
use std::io::*;let y=stdin();y.lock().lines()
In zurückgegebenen Funktionen ()
, bei denen der letzte Ausdruck ebenfalls vom Typ ist ()
, brauchen Sie das Nachstellen nicht ;
:
fn main(){print!("Hello, world!")}