considerare i due frammenti di codice che semplicemente ordinare le stringhe in C#
e F#
rispettivamente:ordinamento di default in C# con F #
C#:
var strings = new[] { "Tea and Coffee", "Telephone", "TV" };
var orderedStrings = strings.OrderBy(s => s).ToArray();
F #:
let strings = [| "Tea and Coffee"; "Telephone"; "TV" |]
let orderedStrings =
strings
|> Seq.sortBy (fun s -> s)
|> Seq.toArray
Questi due frammenti di codice restituiscono risultati diversi:
- C#: Tè e caffè, telefono, TV
- F #: TV, tè e caffè, Telefono
Nel mio caso specifico ho bisogno di correlare la logica ordinamento tra queste due lingue (uno è il codice di produzione, e uno fa parte di un'asserzione di prova). Questo pone alcune domande:
- C'è una ragione alla base delle differenze nella logica di ordinazione?
- Qual è il modo consigliato per superare questo "problema" nella mia situazione?
- Questo fenomeno è specifico delle stringhe o si applica anche ad altri tipi .NET?
EDIT
In risposta ad alcuni commenti di sondaggio, eseguendo i frammenti di sotto rivela di più sulla natura esatta delle differenze di questo ordinamento:
F #:
let strings = [| "UV"; "Uv"; "uV"; "uv"; "Tv"; "TV"; "tv"; "tV" |]
let orderedStrings =
strings
|> Seq.sortBy (fun s -> s)
|> Seq.toArray
C#:
var strings = new[] { "UV", "Uv", "uv", "uV", "TV", "tV", "Tv", "tv" };
var orderedStrings = strings.OrderBy(s => s).ToArray();
Dà:
- C#: TV, TV, TV, TV, uv, UV, UV, UV
- F #: TV, TV, UV, UV, TV, TV, UV, UV
l'ordinamento lessicografico delle stringhe è diversa a causa di una differenza nel modo di fondo di personaggi:
- C#: "aABBCCDD ... tTuUvV ..."
- F #: "ABC..TUV..Zabc..tuv .."
sembra funzionare 'bene' se lo fai '(divertente s -> s.ToLower())' – leppie
Questo è molto strano ... Mi piacerebbe davvero aspetto che questo funziona bene in F #. Se hai parole che iniziano con lettere diverse, come si presentano in F #? –
Grazie a @leppie, questa è una buona soluzione per il "caso stringa". Il mio codice attuale è più generico, basandosi su implementazioni di confronto. Gestire stringhe come caso speciale sarebbe accettabile se sapessi che si tratta di un'anomalia - ma sospetto che ci sia più di quello che capisco ... – Lawrence