Значение последнего элемента списка

Если вы не хотите обновляться до последней версии. Выполните эту команду:

npm install npm@4.2.0 -g

Замените 4.2.0 любой версией, которую вы хотите. Вот все версии выпуска до 3 октября 2017 года: https://nodejs.org/en/download/releases/

17
задан andrew.fox 8 April 2016 в 10:08
поделиться

3 ответа

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

let rec last = function
    | hd :: [] -> hd
    | hd :: tl -> last tl
    | _ -> failwith "Empty list."

Однако ответ Павла Минаева определенно стоит принять во внимание. Тем не менее, запрошенный вами алгоритм может быть полезен в некоторых редких случаях и является наиболее эффективным способом решения задачи.

26
ответ дан 30 November 2019 в 10:09
поделиться

В общем, если вам нужно это сделать, вы что-то делаете неправильно. Поскольку списки F # являются односвязными, доступ к последнему элементу является дорогостоящим - O (N) , где N - это размер списка . Попробуйте переписать свой алгоритм таким образом, чтобы вы всегда обращались к первому элементу , а не к последнему (который равен O (1) ). Если вы не можете этого сделать, велика вероятность, что ваш выбор list для структуры данных изначально был неправильным.

22
ответ дан 30 November 2019 в 10:09
поделиться

Обычный способ работы со списками в F # - использовать рекурсию. Первый элемент в списке - это голова (очевидно), а остальная часть списка - это хвост (в отличие от последнего элемента). Поэтому, когда функция получает список, она обрабатывает заголовок , а затем рекурсивно обрабатывает остальную часть списка (хвост ).

let reversedList = List.rev originalList
let tailItem = List.hd reversedList
0
ответ дан 30 November 2019 в 10:09
поделиться
Другие вопросы по тегам:

Похожие вопросы: