タプルの一覧は(string, int)
です。私は、リストを検索して、その文字列コンポーネントがパラメータと一致するタプルを返そうとしています:let find_tuple string_name tuples_list =
タプル一覧の1つの項目に一致する
どのようにすればいいですか?私はそれの周りに私の頭をかなり包むことができません。 (string, _) ->...
のような一致する構文を使用する方法はありますか?
タプルの一覧は(string, int)
です。私は、リストを検索して、その文字列コンポーネントがパラメータと一致するタプルを返そうとしています:let find_tuple string_name tuples_list =
タプル一覧の1つの項目に一致する
どのようにすればいいですか?私はそれの周りに私の頭をかなり包むことができません。 (string, _) ->...
のような一致する構文を使用する方法はありますか?
あなたは
let rec find_tuple string_name tuples_list =
match tuples_list with
[] -> raise Not_found
|(s, i)::tl -> if s = string_name then (s, i)
else find_tuple string_name tl
または単に
List.find (fun s -> fst s = string_name) tuples_list
はい、あなたはそのようにマッチング構文を使うのですが、試合の警備員が必要になります(または、その後、他の場合に使用することができます)を以下のようにこれを達成することができます。 List
モジュールには、述語と一致する最初の要素を返す、find
という関数があります。また、述語と一致するすべての要素のリストを返す関数filter
(およびfind_all
- 同じ関数)もあります。たとえば:
let predicate string_name tuple = match tuple with (s, _) when s = string_name -> true
| _ false
try
let x = List.find (predicate "query") tuples_list in
...
with Not_found -> ...
EDIT:より良い述語:
let predicate string_name (s, _) = s = string_name
は、しかし、より良い解決策は、タプルのリストに働くList.assoc
を使用することで、タプルはキーと値のペアとみなし:
try
let x = List.assoc "query" tuples_list in ...
with Not_found -> ...
List.assoc
の戻り値は、タプル(あなたのケースでint
)の2番目の要素であるが。タプルの値が必要な場合は、再作成するか、最初の方法を使用します。
'as'キーワードを使用すると、少し単純化することができます。 ((s、i)h):: tl - > if ... then h else ... 'また、fst関数について知りませんでした。 –
2番目のオプションは、 'List.find(fun(string、_) - > string = string_name)tuples_list'と書くこともできます。 – sepp2k
ありがとう! 'let rec'を使って完全に動作しました。 – yavoh