Pertanyaan Bagaimana Anda menggunakan (mendapatkan nilai dari kunci, menambahkan item) Hashtables di F #


Saya ingin tahu cara menggunakan System.Collections.Hashtable di F #. Alasannya adalah Hashtable adalah karena saya mereferensikan rakitan C #.

Bagaimana saya akan memanggil metode berikut ini?  - Tambah  - Dapatkan nilai dari kunci

Saya belum dapat menemukan sesuatu yang bermanfaat di Google tentang hal ini.


5
2018-06-13 12:59


asal


Jawaban:


Seperti Markus menunjukkan, Anda dapat bekerja dengan Hashtable ketik langsung dari F # (sama seperti jenis .NET lainnya). Sintaks untuk mengakses pengindeksan di F # sedikit berbeda meskipun:

open System.Collections 

// 'new' is optional, but I would use it here
let ht = new Hashtable()
// Adding element can be done using the C#-like syntax
ht.Add(1, "One")  
// To call the indexer, you would use similar syntax as in C#
// with the exception that there needst to be a '.' (dot)
let sObj = ht.[1] 

Karena Hashtable tidak generik, Anda mungkin ingin mengembalikan objek ke string. Untuk melakukan itu, Anda bisa menggunakan :?> Operator downcast, atau Anda dapat menggunakan unbox kata kunci dan berikan anotasi tipe untuk menentukan jenis apa yang ingin Anda dapatkan sebagai hasilnya:

let s = (sObj :?> string)
let (s:string) = unbox sObj

Jika Anda memiliki kontrol atas jenis apa yang digunakan, maka saya akan merekomendasikan menggunakan Dictionary<int, string> dari pada Hashtable. Ini sepenuhnya kompatibel dengan C # dan Anda akan menghindari kebutuhan untuk melakukan casting. Jika Anda mengembalikan ini sebagai hasil dari F #, Anda juga bisa menggunakan standar F # map dan hanya melakukannya IDictionary<_,_> sebelum meneruskannya ke C #:

let map = Map.empty |> Map.add 1 "one"
let res = map :> IDictionary<_, _>

Dengan cara ini, pengguna C # akan melihat jenis yang dikenal, tetapi Anda dapat menulis kode dalam gaya fungsional yang biasa.


11
2018-06-13 13:18



Ini cukup mudah untuk dilakukan.

open System.Collections //using System.Collections

let ht = Hashtable() // var ht = new Hashtable()

ht.Add(1, "One")

let getValue = ht.Item[1] // var getValue = ht[1];
//NB: All indexer properties are named "Item" in F#.

2
2018-06-13 13:11