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

时间:2015-03-06 14:53:25

标签: f# hashmap hashtable

我是编程新手,这是我第一次使用类型,功能和.NET语言,所以请原谅我,如果我的问题是愚蠢/琐碎的。

我有一个元组列表,我想将每个元组的第一个项目(这是一个字符串)存储为哈希表中的值,并将每个元组的第二个项目(它是一个字节数组)存储为关键。我怎么可能这样做?

这是我的代码:

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

然而,最后一行用红色突出显示。我怎样才能改进它?在此先感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

简易方法是使用dict

它将在Dictionary中转换元组序列,该字典是字符串类型Hashtable。

> 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";}]

如果您对Hashtable真的感兴趣,可以使用这个简单的功能:

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