Packages
ex_cldr
0.0.3
2.47.5
2.47.4
2.47.3
2.47.2
2.47.1
2.47.0
2.46.0
2.45.2
2.45.1
2.45.0
2.44.1
2.44.0
2.43.2
2.43.1
2.43.0
2.42.0
2.41.1
2.41.0
2.40.4
2.40.3
2.40.2
2.40.1
2.40.0
2.39.2
2.39.1
2.39.0
2.38.1
2.38.0
2.37.5
2.37.4
2.37.3
retired
2.37.2
2.37.1
2.37.0
2.36.0
2.35.1
2.35.0
retired
2.34.2
2.34.1
2.34.0
2.33.2
2.33.1
2.33.1-rc.0
2.33.0
2.32.1
2.32.0
2.31.0
2.30.0
2.29.0
2.28.0
2.27.1
2.27.0
retired
2.26.3
2.26.2
2.26.1
2.26.0
2.25.0
2.24.2
2.24.1
2.24.0
2.24.0-rc.6
2.24.0-rc.5
2.24.0-rc.4
2.24.0-rc.3
2.24.0-rc.2
2.24.0-rc.1
2.24.0-rc.0
2.23.2
2.23.1
2.23.0
2.22.1
2.22.0
2.21.0
2.20.0
2.20.0-rc.3
2.20.0-rc.2
2.20.0-rc.1
2.20.0-rc.0
2.19.1
2.19.0
2.18.2
2.18.1
2.18.0
2.18.0-rc.0
2.17.2
2.17.1
2.17.0
2.16.2
2.16.1
2.16.1-rc.0
2.16.0
2.15.0
2.14.1
2.14.0
2.14.0-rc.0
2.13.0
2.12.1
2.12.0
2.11.1
2.11.0
2.10.2
2.10.1
2.10.0
retired
2.9.0
2.8.1
2.8.0
2.7.2
2.7.1
2.7.0
2.6.2
2.6.1
2.6.0
2.5.0
2.4.3
2.4.2
2.4.1
2.4.0
2.3.2
2.3.1
2.3.0
2.2.7
2.2.6
2.2.5
2.2.4
2.2.3
2.2.2
2.2.1
2.2.0
2.1.0
2.0.4
2.0.3
2.0.2
2.0.1
2.0.0
2.0.0-rc.3
retired
2.0.0-rc.2
retired
2.0.0-rc.1
retired
2.0.0-rc.0
retired
1.8.2
1.8.1
1.8.0
1.7.1
1.7.0
1.6.4
1.6.3
1.6.2
1.6.1
1.6.0
1.5.2
1.5.1
1.5.0
1.4.5
1.4.4
1.4.3
1.4.2
1.4.1
1.4.0
retired
1.4.0-rc.3
retired
1.4.0-rc.2
retired
1.4.0-rc.1
retired
1.4.0-rc.0
retired
1.3.2
1.3.1
1.3.0
1.2.0
1.1.0
1.0.0
1.0.0-rc.3
retired
1.0.0-rc.2
retired
1.0.0-rc.1
retired
1.0.0-rc.0
retired
0.13.1
0.13.0
0.12.2
retired
0.12.1
retired
0.12.0
retired
0.11.0
retired
0.10.0
retired
0.9.0
retired
0.8.3
retired
0.8.2
retired
0.8.1
retired
0.8.0
retired
0.7.0
retired
0.6.2
retired
0.6.1
retired
0.6.0
retired
0.5.2
retired
0.5.1
retired
0.5.0
retired
0.4.2
retired
0.4.1
retired
0.4.0
retired
0.3.0
retired
0.2.1
retired
0.2.0
retired
0.1.3
retired
0.1.2
retired
0.1.1
retired
0.1.0
retired
0.0.20
retired
0.0.19
retired
0.0.18
retired
0.0.17
retired
0.0.16
retired
0.0.15
retired
0.0.14
retired
0.0.13
retired
0.0.12
retired
0.0.11
retired
0.0.10
retired
0.0.8
retired
0.0.7
retired
0.0.6
retired
0.0.5
retired
0.0.4
retired
0.0.3
retired
Common Locale Data Repository (CLDR) functions for Elixir to localize and format numbers, dates, lists, messages, languages, territories and units with support for over 700 locales for internationalized (i18n) and localized (L10N) applications.
Retired package: Deprecated
Current section
Files
Jump to
Current section
Files
bench/scenarios/string_chunk.exs
defmodule String.Chunk.Bench do
@doc """
Split a string up into fixed size chunks.
Returns a list of strings the size of `size` plus potentially
one more chunk at the end that is the remainder of the string
after chunking.
## Examples
iex> Cldr.Number.String.chunk_string("This is a string", 3)
["Thi", "s i", "s a", " st", "rin", "g"]
iex> Cldr.Number.String.chunk_string("1234", 4)
["1234"]
iex> Cldr.Number.String.chunk_string("1234", 3)
["123","4"]
iex> Cldr.Number.String.chunk_string("1234", 3, :reverse)
["1", "234"]
"""
@spec chunk_string(String.t, integer, :forward | :reverse) :: [String.t]
# This version is the same as version 2 in the forward direction
# but differs in the reverse direction. Implementation [2] does
# a lot of string reversal and enumeration which we can avoid if we
# calculate the size of the orhpan chunk at the end. That means
# the reverse version is pretty much the same as version 2 :reverse.
def chunk_string(string, size, direction \\ :forward)
def chunk_string("", _size, _) do
[""]
end
def chunk_string(string, size, :forward) do
string
|> String.to_charlist
|> Enum.chunk(size, size, [])
|> Enum.map(&List.to_string/1)
end
def chunk_string(string, size, :reverse) do
len = String.length(string)
remainder = rem(len, size)
if remainder > 0 do
{head, last} = String.split_at(string, remainder)
[head] ++ do_chunk_string(last, size)
else
do_chunk_string(string, size)
end
end
defp do_chunk_string("", _size) do
[]
end
defp do_chunk_string(string, size) do
{chunk, rest} = String.split_at(string, size)
[chunk] ++ do_chunk_string(rest, size)
end
# Original version which is second fastest in the
# forward direction and second fastest in the reverse direction
def chunk_string3(string, size, direction \\ :forward)
def chunk_string3("", _size, _) do
[""]
end
def chunk_string3(string, size, :forward) do
len = String.length(string)
remainder = rem(len, size)
if remainder > 0 do
{head, last} = String.split_at(string, len - remainder)
do_chunk_string(head, size) ++ [last]
else
do_chunk_string(string, size)
end
end
def chunk_string3(string, size, :reverse) do
len = String.length(string)
remainder = rem(len, size)
if remainder > 0 do
{head, last} = String.split_at(string, remainder)
[head] ++ do_chunk_string(last, size)
else
do_chunk_string(string, size)
end
end
# Alternative version splitting into a list and chunking the list
# We can assume these are all bytes representing integers in the latin1
# alphabet since we are only using this method for formatting number
# before transliteration. The assumption is that we are working with
# bytes, not unicode graphemes (which are variable length)
def chunk_string2(string, size, direction \\ :forward)
def chunk_string2("", _size, _) do
[""]
end
def chunk_string2(string, size, :forward) do
string
|> String.to_charlist
|> Enum.chunk(size, size, [])
|> Enum.map(&List.to_string/1)
end
def chunk_string2(string, size, :reverse) do
string
|> String.to_charlist
|> :lists.reverse
|> Enum.chunk(size, size, [])
|> Enum.map(&:lists.reverse/1)
|> :lists.reverse
|> Enum.map(&List.to_string/1)
end
end