私はF#を学ぼうとしています。そして私は簡単なsoundex表現でsomヘルプが必要です。F# - 文字の配列から後続の重複を削除する(順序なし)
1.) Assign characters to classes
2.) Remove duplicate values here, e.g. 222 becomes 2
3.) Replace first encoded char with first char
4.) Remove nulls
5.) Truncate ot pad to totally 4 characters
現在、私はノールールに引っかかっています: 私は(もアメリカンと呼ばれる)簡体字については、以下のルールセットのsoundexを使用しています。 2.私は再帰式を使うことを考えていました。 私は現在F#のn00bですので、私の問題に対する洗練された解決策を求めてみるつもりです。テキストをsoundexに翻訳する私の全アプローチは目標外でしょうか?
任意の提案は大歓迎されます:)ここで
が私のコードです:
let Simplified (name:string) =
let ca = name.ToLower().ToCharArray()
new string(
Array.map(
fun e ->
match e with
| 'a' | 'e' | 'i' | 'o' | 'u' | 'y' | 'w' | 'h' -> '0'
| 'b' | 'f' | 'p' | 'v' -> '1'
| 'c' | 's' | 'k' | 'g' | 'j' | 'q' | 'x' | 'z' -> '2'
| 'd' | 't' -> '3'
| 'l' -> '4'
| 'm' | 'n' -> '5'
| 'r' -> '6'
| _ -> ' '
) ca
//|> fun s -> TODO: Remove duplicates here
|> fun s -> Array.set s 0 (ca.[0])
Array.choose(fun e -> if e <> '0' then Some(e) else None) s
)
|> fun s -> (
match s.Length with
| x when x < 3 -> s.PadRight(4, '0')
| _ -> s.Substring(0, 4)
).ToUpper()
NB:これらはリストのソートのみで動作します... – Massif
はい、私は、タスクが連続する重複を削除することを前提としていました。さもなければ解決策はちょうどSeq.distinct |> Seq.toArray - 私はポストを更新します。 – zeuxcg
貧しい無視されたfoldBackを忘れないでください。 – gradbot