2015-05-16 3 views
2

Допустим, у меня есть список, содержащий список int и int *. Как бы я мог извлечь значение int из этого списка? Вы можете сопоставить шаблон для главы списка или хвоста, но как бы вы извлекли int?Извлечь Значение из списка списков в OCaml

+1

Откуда вы знаете, какой из них хотите извлечь? Это поможет, если вы приведете пример ввода и нужный результат. –

ответ

4

Вы всегда можете просто сделать две картины матчей подряд

match [[1;2]; [3;4]] with 
    | (firstrow::_) -> (
     match firstrow with -> 
     | (x :: _) -> x 
     | []  -> 0) 
    | _ -> 42 

Its также хорошо писать картины совпадает с несколькими уровнями.

match [[1;2]; [3;4]] with 
    | (x::_)::_ -> x 
    | ([]::_) -> 0 
    | _   -> 42 

При этом не обязательно использовать сопоставление образцов для доступа к элементам списка. Вы также можете использовать List.map или одну из многих других функций управления списками в зависимости от того, что вы на самом деле пытаетесь сделать.

2

Я не понимаю, какое значение вы хотите извлечь точно, предположим, что вы хотите извлечь все целые числа в своем int list list и не хотите писать сопоставления шаблонов с несколькими уровнями, вы можете сначала использовать функцию List.flatten чтобы получить int list, а затем делать все, что вы хотите сделать:

let l = List.flatten [[1; 2]; [3; 4]] in (* l = [1; 2; 3; 4] *) 
List.iter print_int l      (* iter, map or any other function *) 
0

, если вы думаете, что ваш список списков в качестве матрицы и у вас есть столбец строки вы хотите

List.nth col (List.nth ln matrix)

List.nth приятно использовать в этом случае, с информацией, которую вы получили от меня, я думаю, что это то, что вы хотите

Смежные вопросы