F#:将元组转换为哈希表

F#: Converting tuples into a hashtable

我是编程新手,这是我第一次使用类型化、函数式和 .NET 语言,如果我的问题是 silly/trivial,请原谅我。

我有一个元组列表,我想将每个元组的第一项(它是一个字符串)存储为哈希表中的一个值,以及每个元组的第二项(它是一个字节数组)元组作为键。我该怎么做?

这是我的代码:

let readAllBytes (tupleOfFileLengthsAndFiles) =
    let hashtable = new Hashtable()
    tupleOfFileLengthsAndFiles
    |> snd
    |> List.map (fun eachFile -> (eachFile, File.ReadAllBytes eachFile))
    |> hashtable.Add(snd eachTuple, fst eachTuple)

但是,最后一行用红色下划线标出。我该如何改进它?在此先感谢您的帮助。

最简单的方法是使用 dict

它将字典中的元组序列转换为字符串类型的哈希表。

> dict [(1,"one"); (2,"two"); ] ;;
val it : System.Collections.Generic.IDictionary<int,string> =
  seq [[1, one] {Key = 1;
             Value = "one";}; [2, two] {Key = 2;
                                        Value = "two";}]

如果您真的对哈希表感兴趣,可以使用这个简单的函数:

let convert x = 
  let d = Hashtable()
  x |> Seq.iter d.Add
  d

所以,我不确定你想用这个做什么,看来你也有兴趣在转换过程中读取文件。可能是这样的:

let readAllBytes (tupleOfFileLengthsAndFiles:seq<'a*'b>) =
    tupleOfFileLengthsAndFiles
        |> Seq.map (fun (x, y) -> x, File.ReadAllBytes y)
        |> convert