SS
Size: a a a
SS
D
D
D
D
VS
[string, zeroes]
, а [string | zeroes]
, тогда как String.trim_trailing
двигается справа налево по хвосту из нулей и возвращает строкуAU
LL
LL
:string.split
тут вообще не верный вариант. А вот в тот же binary.split
работает за всю длину строки, пока String.trim_trailing
только за длину хвоста из нулейn
) + длина хвоста (m
), то :binary,split
работает за O(n + m)
, а String.trim_trailing
работает за O(m)
что быстрее:binary.split()
сделает O(m)
перекопирований строк (если старая версия будет использоваться)V
VS
:string.split
тут вообще не верный вариант. А вот в тот же binary.split
работает за всю длину строки, пока String.trim_trailing
только за длину хвоста из нулейn
) + длина хвоста (m
), то :binary,split
работает за O(n + m)
, а String.trim_trailing
работает за O(m)
что быстрее:binary.split()
сделает O(m)
перекопирований строк (если старая версия будет использоваться)String.trim_trailing
`, делающий n копирований binary, где n - число совпадений шаблона в конце строкиAU
AU
KA
AM
V
IK
defmodule OrkestroWeb.Params.CreateDelivery do
@moduledoc false
use Ecto.Schema
import Ecto.Changeset
use Params.Schema
alias Orkestro.Core.Enums.DeliveryCreationReason.Ecto, as: DeliveryCreationReason
alias Orkestro.Orders.{Address, DeliverySchedule, Note, Parcel}
@required ~w(order_id reason schedule parcel pickup dropoff)a
embedded_schema do
field(:order_id, :string)
field(:source_delivery_id, :string)
field(:reason, DeliveryCreationReason)
embeds_one(:schedule, DeliverySchedule)
embeds_one(:parcel, Parcel)
embeds_one(:pickup, Address)
embeds_one(:dropoff, Address)
embeds_many(:notes, Note)
end
def to_valid_attrs(%{} = params) do
params
|> from()
|> to_map()
end
@spec to_map(Ecto.Changeset.t()) :: {:ok, map()} | {:error, Ecto.Changeset.t()}
defp to_map(%Ecto.Changeset{valid?: true} = params), do: {:ok, Params.to_map(params)}
defp to_map(%Ecto.Changeset{} = changeset), do: {:error, changeset}
end
LL
String.trim_trailing
`, делающий n копирований binary, где n - число совпадений шаблона в конце строкиString.trim_trailing
не копирует каждый раз, потому что рекурсия хвостовая, а бинарь - это аргумент. Там просто меняется значение длины бинаря. Так что тут копируется один раз:binary.split
копирование и правда будет один раз и тут он будет быстрее. Я запутался, потому что сначала вы написали String.split
IK
IK