F# 以F表示的字符值#

F# 以F表示的字符值#,f#,F#,假设我有一个字符串“COLIN” 此字符串的数值应为: 3+15+12+9+14=53 所以 A=1、B=2、C=3,依此类推 我甚至不知道如何从F#开始 let mutable nametotal = 0 let rec tcalculate name = name.ToString().ToCharArray() |> Seq.length 这是我到目前为止所拥有的。seq.length只是用来测试toCharArray是否真的有效。我发现了一种使用字符的ascii值

假设我有一个字符串“COLIN”

此字符串的数值应为:

3+15+12+9+14=53

所以

A=1、B=2、C=3,依此类推

我甚至不知道如何从F#开始

let mutable nametotal = 0
let rec tcalculate name =
    name.ToString().ToCharArray()
    |> Seq.length

这是我到目前为止所拥有的。
seq.length
只是用来测试
toCharArray
是否真的有效。

我发现了一种使用字符的ascii值并从中获取数字的黑客方法,但我认为可能有更好的方法

let tcalculate name =
    name.ToString().ToLower().ToCharArray()
    |> Seq.map (fun char -> Convert.ToInt32 char - 96)
    |> Seq.sum 
工作很漂亮,也许比“映射”更有效,但我想查看我要求的解决方案


谢谢大家。

您所需要做的就是将字符串改为小写,将其转换为字符数组,就像您所做的那样,循环遍历每个字母,取每个字符的值,减去“a”的值,再加上一个。这将使每个字母都有其在字母表中的位置值。

你拥有的是体面的;以下是另一个版本:

#light

let Value (c:char) = 
    (int c) - (int 'A') + 1

let CalcValue name =
    name |> Seq.sum_by Value

printfn "COLIN = %d" (CalcValue "COLIN")
// may be of interest:
printfn "%A" ("COLIN" |> Seq.map Value |> Seq.to_list)
它假定原始输入为大写。“int”是一个将字符(或任何内容)转换为int的函数;Seq.sum_by是这方面的完美选择

let mutable nametotal = 0
let rec tcalculate name =
    name.ToString().ToCharArray()
    |> Seq.length

我还展示了一个使用map的示例,不确定您感兴趣的是什么。

如果“映射”更随意,您可以使用下面的代码这样的策略,其中您可以指定每个字母映射到的值的数据结构

#light

let table = [
    'C', 3
    'O', 15
    'L', 12
    'I', 9
    'N', 14
    ]

let dictionary = dict table

let Value c = 
    match dictionary.TryGetValue(c) with
    | true, v -> v
    | _ -> failwith (sprintf "letter '%c' was not in lookup table" c)

let CalcValue name =
    name |> Seq.sum_by Value

printfn "COLIN = %d" (CalcValue "COLIN")

我意识到这很古老,但我最近正在学习F#,并在玩这个问题中的想法。也许有人会发现它很有用:

let table = 
  Seq.zip ['A'..'Z'] (Seq.initInfinite((+) 1)) 
  |> Map.ofSeq

let calc (input : string) =
  let s = input.ToUpper()
  match s with
  | _ when Seq.forall System.Char.IsLetter s ->
    Some (Seq.sumBy (fun c -> table.[c]) s)
  | _ -> None

是的,这就是我想到的,但我正在学习这门语言,所以我想知道,如果有一种方法可以“映射”一个问题,“let dictionary=dict table”是什么意思。。具体来说,“dict”在这个上下文中做什么?“dict”是一个从一系列键值对中生成IDictionary的函数。