f#-interactive

___ qstntxt ___

Ich bin neu in F # und ich versuche herauszufinden, wie man einen zufälligen String-Wert aus einer Liste / einem Array von Strings zurückgibt.

Ich habe eine Liste wie folgt:

%Vor%

Wie kann ich einen Gegenstand aus der obigen Liste zufällig auswählen und zurückgeben?

Hier ist mein erster Versuch:

%Vor%     
___ qstnhdr ___ Wie kann ich einen zufälligen Wert aus einer Liste mit F # auswählen? ___ tag123random ___ Dieses Tag ist für Fragen gedacht, die sich auf Zufallszahlen und deren Generatoren beziehen, sei es pseudozufällig oder wirklich zufällig. ___ tag123f ___ F # ist eine prägnante, ausdrucksstarke und effiziente funktionale und objektorientierte Sprache für .NET, mit der Sie einfachen Code zur Lösung komplexer Probleme schreiben können. ___ answer33312434 ___

Ihr Problem besteht darin, dass Sie %code% s und F # %code% s mischen ( %code% ist eine Typnotation für %code% ). Sie könnten es ändern, um Listen zu verwenden:

%Vor%

Das heißt, die Indizierung in %code% ist normalerweise eine schlechte Idee, da sie eine O (n) -Leistung hat, da eine F # -Liste im Grunde eine Linked-List ist. Sie sollten besser %code% in ein Array machen, wenn möglich wie folgt:

%Vor%     
___ answer33316100 ___

Beide Antworten von latkin und mydogisbox sind gut, aber ich möchte noch einen dritten Ansatz hinzufügen, den ich manchmal verwende. Dieser Ansatz ist nicht schneller, aber flexibler und kompostierbarer und schnell genug für kleine Sequenzen. Je nach Ihren Anforderungen können Sie eine der hier aufgeführten leistungsstärkeren Optionen verwenden, oder Sie können Folgendes verwenden.

Funktion mit einem Argument unter Verwendung von Random

Anstatt dir direkt die Auswahl eines einzelnen Elements zu erlauben, definiere ich oft eine Funktion %code% wie folgt:

%Vor%

Diese Funktion hat den Typ %code% , also funktioniert sie mit jeder Art von Sequenz: Listen, Arrays, Sammlungen und lazy evaluierten Sequenzen (allerdings nicht mit unendlichen Sequenzen).

Wenn Sie ein einzelnes zufälliges Element aus einer Liste möchten, können Sie das immer noch tun:

%Vor%

Sie können aber auch sagen, drei zufällig ausgewählte Elemente:

%Vor%

Keine Argumentfunktion

Manchmal ist es mir egal, dass ich diesen %code% Wert übergeben muss, also definiere ich diese alternative Version:

%Vor%

Es funktioniert auf die gleiche Weise:

%Vor%

Obwohl der Zweck von %code% nicht darin besteht, Zufallszahlen zu liefern, ist es oft zufällig genug für meine Zwecke - zufällig, in dem Sinne, dass es unberechenbar ist.

Verallgemeinerte Funktion

Weder %code% noch %code% sind wirklich zufällig. Aufgrund der Funktionsweise von %code% und %code% können beide Funktionen zu leicht verzerrten Verteilungen führen. Wenn dies ein Problem ist, können Sie eine noch allgemeinere Funktion %code% definieren:

%Vor%

Diese Funktion hat den Typ %code% . Es kann weiterhin mit %code% verwendet werden:

%Vor%

Sie können es aber auch mit einigen kryptographisch sicheren Zufallszahlengeneratoren verwenden, die von der Basisklassenbibliothek bereitgestellt werden:

%Vor%

FSI:

%Vor%

Wie Sie aus diesem Code entnehmen können, ist es leider ziemlich umständlich und spröde. Sie müssen die Länge der Sequenz von vorne kennen; %code% implementiert %code% , also sollten Sie sicherstellen, dass %code% nach der Verwendung gelöscht wird; und Elemente werden nach der Verwendung aus %code% entfernt, was bedeutet, dass sie nicht wiederverwendet werden können.

Kryptografisch zufällige Sortierung oder Auswahl

Wenn Sie wirklich eine kryptografisch korrekte Sortierung oder Auswahl benötigen, wäre es einfacher, dies so zu tun:

%Vor%

Verwendung:

%Vor%

Das war aber nie etwas, was ich jemals tun musste, aber ich dachte, ich würde es hier der Vollständigkeit halber hinzufügen. Während ich es nicht gemessen habe, ist es wahrscheinlich nicht die schnellste Implementierung, aber es sollte kryptographisch zufällig sein.

    
___ tag123finderactive ___ F # Interaktiv ist die REPL (read-eval-print-loop) für die Programmiersprache F #. ___ answer33312524 ___ ___
3
Antworten

F # interaktiv - wie alle in der aktuellen Sitzung definierten Variablen angezeigt werden

Wie kann ich in F # interaktiv eine Liste von Variablen / Funktionen sehen, die in dieser Sitzung definiert wurden? Wie eine Funktion whos() in Python oder ls() in R? Danke.     
14.02.2011, 20:43
2
Antworten

Definieren von Modulen VS.NET vs F # Interactive

Ich habe diesen Code geschrieben, der perfekt in VS.NET 2010 kompiliert und funktioniert %Vor% aber wenn ich ein Steuerelement + A und Alt + Enter, um dies an FSI zu senden, bekomme ich einen Fehler ConfigHandler.fs (2,1): Fehler FS0010:...
28.08.2012, 09:07
1
Antwort

Dateien in eine FSX-Datei einbeziehen?

Ich verwende F # als Skriptsprache mit FSI. Gibt es eine Möglichkeit, eine andere fsx-Datei in mein Skript aufzunehmen? Ich möchte meine Skripte für größere Aufgaben in mehrere Dateien aufteilen können. Danke.     
28.06.2011, 17:03
1
Antwort

F # / C # - fsx Skriptdateien und Projektreferenzen

Sie haben eine Lösung mit einem C # -Projekt darin. SomeComp.Framework ist der Name. Sie fügen der Lösung ein F # -Projekt hinzu. Sie verweisen auf das SomeComp.Framework-Projekt in dem F # -Projekt. Sie fügen eine Skriptdatei - test.fsx in das...
23.06.2010, 14:23
2
Antworten

JsonProvider "Dies ist kein konstanter Ausdruck oder kein gültiger benutzerdefinierter Attributwert"

Gegeben der Code: %Vor% Die letzte Zeile gibt mir den Fehler "Dies ist kein konstanter Ausdruck oder kein gültiger benutzerdefinierter Attributwert" - was bedeutet das? Wie kann ich es bekommen, dieses JSON zu lesen?     
21.07.2013, 11:53
1
Antwort

Probleme beim Ausführen von FParsec in F # Interactive

Ich versuche, einen FParsec -Code in F # Interactive auszuführen, aber ohne Erfolg. ich bin  kann diese tutorial.fs -Datei erstellen und ausführen, aber das gleiche passiert nicht mit FSI, da FParsec.dll nicht erkannt wurde. Ich habe...
22.08.2011, 02:55
1
Antwort

So testen Sie C # -Funktionen interaktiv mit F # Interactive

Ich habe eine Reihe von statischen Utility-Methoden einschließlich Unit-Tests. Aber ich hätte gerne einen interaktiveren Weg, um einen Test zu verwenden - & gt; Fixierung - & gt; Kompilierungszyklus (REPL) wie in Lisp oder Smalltalk, wo man Code...
25.11.2010, 16:07
1
Antwort

Hinzufügen einer Referenz über das interaktive Fenster von F #

Ist es möglich, einen Verweis auf eine .NET-Bibliothek über das interaktive Fenster von F # hinzuzufügen? Zum Beispiel: %Vor%     
29.01.2010, 19:55
3
Antworten

Wie kann ich einen zufälligen Wert aus einer Liste mit F # auswählen?

Ich bin neu in F # und ich versuche herauszufinden, wie man einen zufälligen String-Wert aus einer Liste / einem Array von Strings zurückgibt. Ich habe eine Liste wie folgt: %Vor% Wie kann ich einen Gegenstand aus der obigen Liste zufälli...
23.10.2015, 22:22