Да, вы использовать соответствующий синтаксис, как это, но нужно будет матч охранников (или вы можете использовать, если потом еще) , Модуль 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
в вашем случае). Если вы хотите получить значение кортежа, воссоздайте его или используйте первый подход.
Вы можете использовать ключевое слово 'as' для упрощения вещей:' | ((s, i) как h) :: tl -> if ... then h else ... 'Также не знал о функции' fst', спасибо за указание! –
Второй вариант также можно записать как «List.find (fun (string, _) -> string = string_name) tuples_list', в котором есть' (string, _) 'OP. – sepp2k
Спасибо! С 'let rec' он работал отлично. – yavoh