Konvertieren einer Liste von Zeichenfolgen in Floats / Ints in F #

7

Gibt es eine schnelle und einfache Möglichkeit, eine ganze Liste von Strings in Floats oder Integer umzuwandeln und addiere sie ähnlich wie in F #?

%Vor%     
Jacco 29.12.2013, 12:38
quelle

3 Antworten

14

So etwas sollte den gleichen Effekt haben:

%Vor%

F # scheint nicht auf die Methode in int zu verweisen, also musste ich stattdessen System.Int32 verwenden.

In F # ist der Typ seq ein Alias ​​für die .NET IEnumerable , daher funktioniert dieser Code auf Arrays, Listen usw.

Beachten Sie die Verwendung von Parse im "point-free" -Stil - eine Funktion ohne ihr Argument kann direkt als Argument für eine andere Funktion verwendet werden, die diesen Typ erwartet. In diesem Fall hat Seq.map diesen Typ:

%Vor%

Und da System.Int32.Parse den Typ string -> int hat, hat Seq.map System.Int32.Parse den Typ seq<string> -> seq<int> .

    
Ganesh Sittampalam 29.12.2013, 12:41
quelle
14

Wenn Sie auf eine minimale Anzahl von Zeichen abzielen, können Sie die von Ganesh veröffentlichte Lösung in etwa so vereinfachen:

%Vor%

Das macht ziemlich genau dasselbe - die Funktion int ist eine generische Konvertierung, die alles in eine Ganzzahl konvertiert (und auch für Strings). Die Funktion sumBy ist eine Kombination aus map und sum , die zuerst alle Elemente auf einen numerischen Wert projiziert und dann die Ergebnisse summiert.

    
Tomas Petricek 29.12.2013 13:52
quelle
0

Technisch gibt es mindestens 3 verschiedene Ansätze:

1) Der in den anderen Antworten beschriebene Ansatz Seq.sum oder sumBy ist der kanonische Weg, die Summe in F # zu erhalten:

%Vor%

2) Für Lehrzwecke kann es interessant sein zu sehen, wie genau man C # Verhalten in F # simulieren kann; Verwenden Sie beispielsweise einen Referenzzelltyp:

%Vor%

3) Gleiche Idee wie 2), aber mit einem byref-Zeigertyp:

%Vor%     
Marc Sigrist 08.01.2014 18:25
quelle

Tags und Links