Я использую ядро Janestreet, и я хочу в основном делать String.map str (Char.to_int)
, но String.map требует функцию be (char -> char) и возвращает строку (а не список по мере необходимости)). Альтернатива, которую я знаю, это использовать цикл for и составить список, но это не очень FPish. Есть ли карта, которая берет строку и (char -> 'a) и возвращает список?Map (char -> int) over String
ответ
Я вижу функцию с именем to_list_rev
в расширении ядра модуля String. Он переводит строку в обратный список символов. Таким образом, вы могли бы сделать что-то вроде этого:
List.rev_map Char.to_int (String.to_list_rev s)
Update
Оказывается, что в ядре, String также Container. Ссылка на Контейнер не работает в документации, но я думаю, что это означает, что есть функция to_list
, которая кажется более естественной в использовании.
Таким образом, даже если вы не хотите идти по этому пути, этот код кажется опрятнее, чем выше:
List.map Char.to_int (String.to_list s)
написал свой собственный, как Джефф предложил. Должна быть разумно эффективной.
let rec str_map_helper str f acc ind =
if ind = -1
then acc
else str_map_helper str f ((f str.[ind])::acc) (ind - 1);;
let string_map str f =
str_map_helper str f [] ((String.length str) - 1);;
Это, вероятно, должно быть сделано как вложенная функция.
Это определение не будет работать с пустыми строками. – Romildo
@ Romildo: Спасибо, что указали это. Решение состояло бы в том, чтобы str_map_helper немедленно возвращал acc, если ind = -1, я бы отредактировал код, но у моего текущего компьютера нет OCaml. –
Все функции карты возвращают один и тот же контейнер, но с различными элементами. Самое легкое решение будет:
String.to_list str |> List.map ~f:Char.to_int
Это очень хорошо, и очень распространенная идиома. Конечно, вы можете использовать rev_map
, чтобы ускорить вещи немного:
String.to_list_rev str |> List.rev_map ~f:Char.to_int
Еще один, более громоздким вариантом было бы построить новый список, а развернув строку с помощью функции List.init
:
let to_codes str =
List.init (String.length str) ~f:(fun n ->
Char.to_int str.[n])
- 1. cypher function :: [(Int, Char)] -> [String]
- 2. stxxl map <int, string>
- 3. Почему (String, Int) ожидается вместо (Char, Int)?
- 4. convert scala map string -> string to string -> map
- 5. перебрать Map <Map <String, String> Map <String, String >> в заводной
- 6. Scala Map [(String, String), Int] построить соответствующую MAP [String, String]
- 7. Использование строки <string, string> или <string, char> вместо <char, char> в C++
- 8. Convert Map <> to Map <String, String>
- 9. Scala: для понимания, чтобы превратить String в Map [Char, Int]
- 10. Iterate over List <Map <String, String >> в Java
- 11. C++ char ** -> vector <string> -> string -> char ** проблема синтаксического анализа
- 12. int [] from String или int [] from char []
- 13. strfry (char * __ string) возвращает int?
- 14. remove int, char from string
- 15. int to string, char * itoa
- 16. Groovy Map <String, List <Map <String, String >>> данные манипуляции
- 17. Java, почему Карта Map (например: Map <String, Map <String, String >>) не serializeable
- 18. Map char to int in Objective-C
- 19. пытается проанализировать входы, которые идут int string string char int
- 20. Mongo DB Query on List <Map <String, Map <String, String >>>
- 21. Вставить в wxListCtrl из "map <string, map <string, string>>"
- 22. Удалить память std :: map <int, string> полностью
- 23. std :: map <string,int> инициализация значения по умолчанию
- 24. `auto-increment` std :: map <string, int> :)
- 25. Когда вы используете String over int
- 26. Haskell - [Int] -> String
- 27. Java - Reorder Map <String, List <String>>
- 28. STL map <string,FOO> vs map <int,FOO> Производительность
- 29. Map <Integer, String> или String []?
- 30. char [] -> String -> bytes [] -> String ... и я потерян
Эх .. Я все еще надеюсь на лучший ответ. –
Я не обвиняю вас :-) Fwiw, было бы не так сложно просто написать нужную функцию карты. –
Я закончил тем, что принял ваш совет. –