我是编程新手,这是我第一次使用类型,功能和.NET语言,所以请原谅我,如果我的问题是愚蠢/琐碎的。
我有一个元组列表,我想将每个元组的第一个项目(这是一个字符串)存储为哈希表中的值,并将每个元组的第二个项目(它是一个字节数组)存储为关键。我怎么可能这样做?
这是我的代码:
let readAllBytes (tupleOfFileLengthsAndFiles) =
let hashtable = new Hashtable()
tupleOfFileLengthsAndFiles
|> snd
|> List.map (fun eachFile -> (eachFile, File.ReadAllBytes eachFile))
|> hashtable.Add(snd eachTuple, fst eachTuple)
然而,最后一行用红色突出显示。我怎样才能改进它?在此先感谢您的帮助。
答案 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