このデータセットを検討してください:サブセットJSONデータ
type Deck = JsonProvider<"...">
let dt = Deck.GetSamples()
dt
[{"collectible":true,"health":4,"artist":"Zoltan Boros","type":"MINION","cost":1,"attack":2},
{"collectible":true,"health":8,"artist":"James Ryman","type":"MINION","cost":8,"attack":8},
{"collectible":true,"health":3,"artist":"Warren Mahy", "type":"LAND","cost":2,"attack":2}]
私はそれから特定の情報を抽出することができる機能を構築しようとしていると、最終的には、小さなデータセットに保存しています。リスト形式のデータセットdeck
がある場合は、key
のカードはvalue
と等しいとします。例えば
let rec filter deck key value =
let rec aux l1 l2 l3 =
match l1 with
[] -> []
| x::xs when x.l2 = l3 -> x::(aux xs key value)
aux deck key value
、
filter dt type minion
は、第一及び第二のカードと小さいものでデッキをサブセットべきです。私はコンセプトを得ることにいくつかの手順を前進したと思うが、それでもそれは私がkey
のタイプを定義する必要がありますどのような種類
FS0072: Lookup on object of indeterminate type based on information prior to
this program point. A type annotation may be needed prior to this program point to
constrain the type of the object. This may allow the lookup to be resolved.
のエラーを投げ、動作しませんか?私はkey : string
とkey : string list
で成功しませんでした。
どうして?私はあなたが '? '演算子の引用符をつけずにコードを文字列として解釈することはできないと思っていますが、それにかかわらず、最初は型プロバイダを持っている点を無視しています。 'fun(c:Deck.Root) - > c.Type =" MINION "'のようなフィルター関数を使用すると何が問題になりますか? – Vandroiy
@Vandroiy、フィルタ機能に間違いはありません。私は単にそれらを認識していませんでした。私にそれを示してくれてありがとう。 – Worice
@Woriceどの言語であっても、そのコレクションとそれを操作する関数(関数型言語ではそうかもしれない)に精通していることが役立ちます。これはすばらしい概要です:[Collections&Functions](http://fsharpforfunandprofit.com/posts/list-module-functions/)。 – s952163