Я учусь использовать карту больше (чтобы стать более функциональным программистом). Похоже, что Map требуется список в качестве выражения, к которому будет применяться функция. Если выражение не является списком, оно не устраивает.
Я использую NumberForm в этом примере, чтобы проиллюстрировать, что я имею в виду:
Я могу отобразить NumberForm на весь список, хорошо:
data = {1, 2, 3}
Map[NumberForm[#, {3, 2}] &, data]
Но если я попытаюсь сопоставить его с каким-то конкретным элементом в списке, скажем, первым из приведенного выше, он не будет работать
data = {1, 2, 3}
Map[NumberForm[#, {3, 2}] &, data[[1]] ]
Возвращенный результат НЕ отформатирован. То же, что и исходные данные. т.е. я получаю «1», а не «1,00», как в других примерах.
Чтобы решить, я добавил дополнительно {}
data = {1, 2, 3}
Map[NumberForm[#, {3, 2}] &, {data[[1]]} ]
теперь работает (нужно просто удалить {}
из результата, используя First
).
Итак, я подумал, тогда почему бы не добавить этот дополнительный {}
все время и удалить его в конце?
Таким образом, мне не нужно беспокоиться о том, что то, с чем я работаю в функции Map'ing, не является списком, как в примере выше?
Итак, все мои примеры станут такими:
data = {1, 2, 3}
First@Map[NumberForm[#, {3, 2}] &, { data } ]
First@Map[NumberForm[#, {3, 2}] &, { data[[1]] } ]
Таким образом, код будет работать на все, и мне не нужно делать специальную проверку перед использованием Map, если то, к чему я применял Map, является списком или нет.
Вопрос в том, выглядит ли вышеприведенное решение для экспертов нормально, или есть лучший способ справиться с этим?