2016-12-14 8 views
2

У меня есть список, который представляет метку и ряд значений данных, как это: (со многими другими элементами)F # форматирования строки список ломтики

[10; 0; 0; 1; 0; 0; 1]

И я хочу, чтобы записать его в файл как это:

|y 10 |x 0 0 1 0 0 1

Что это самый простой способ сделать это форматирование?

ответ

6

Вы можете использовать шаблон согласования, чтобы отделить первый элемент списка:

let input = [10; 0; 0; 1; 0; 0; 1] 
match input with 
| label::data -> 
    let body = data |> List.map string |> String.concat " " 
    printf "|y %d |x %s" label body 
| _ -> 
    failwith "Label is missing!" 

Если вы хотите, чтобы записать данные в файл, вы можете использовать sprintf (которая возвращает строку), а не printf. Если ваши данные были очень большими, лучше писать числа один за другим, а не конкатенировать одну большую строку в памяти, но идея была бы такой же.

+0

Я думаю, что ваш второй 'printf' arg должен быть' body', а не 'data'. –

+0

Ницца! Я должен привыкнуть к тому, чтобы попробовать больше шаблонов. – VillasV

+0

@CharlesMager Спасибо! Исправлена. –