Open main menu
Posts
Gists
Guilds
Users
Decipher
Docs
Open user menu
Log in
Sign up
Create a new gist
Posts
Gists
Guilds
Users
Decipher
Docs
Files
tests.src
listLib.src
tests.src
import_code("/home/me/lst
/listLib
.src")
print(Lst)
import_code("/home/me/lst.src")
//to list
print
(
"to_list"
)
print
"to_list"
a = {"a": 1, "b": 2, "c": {"a": 1}, "d": []}
print
(Lst
.to_list
(a))
print
a
.to_list
//to map
print
(
"to_map"
)
print
"to_map"
a = [["a", 1], ["b", [1,2]], ["c", [["d", []]]]]
print
(Lst
.to_map
(a))
print
a
.to_map
//each
print
(
"each"
)
print
"each"
a = {"a": 1, "b": 2}
b = [1,2,3]
print_map = function(k,v)
print(k + ":" + v)
end function
Lst
.each(
a,
@print_map)
a
.each(@print_map)
print_list = function(i)
print(i)
end function
Lst
.each(
b,
@print_list)
b
.each(@print_list)
//map
print
(
"map"
)
print
"map"
double = function(n)
return n * 2
end function
print
(Lst.map(
[1,2,3,4]
,
@double)
)
print
[1,2,3,4]
.map(
@double)
//reject
print
(
"reject"
)
print
"reject"
more_5 = function(number)
return number > 5
end function
print
(Lst.reject(
[1,2,3,4,5,6,7,8]
,
@more_5)
)
print
[1,2,3,4,5,6,7,8]
.reject(
@more_5)
// select
print
(
"select"
)
print
"select"
more_5 = function(number)
return number > 5
end function
print
(Lst.select(
[1,2,3,4,5,6,7,8]
,
@more_5)
)
print
[1,2,3,4,5,6,7,8]
.select(
@more_5)
//sort
print
(
"sort"
)
print
"sort"
Coin = {}
Coin.discount = function()
return self.value - 1
end function
coins = []
for i in [5, 10, 4, 2, 11]
coin = new Coin
coin.value = i
coin.name = "coin" + i
coins.push(coin)
end for
f = function(coin)
return coin.discount
end function
sorted_coins = coins.lsort(@f)
for c in sorted_coins
print c.value
end for
//flat
print "flat"
a = [[[2], [[[[3]]], [4]]]]
print a.flat
//uniq
print "uniq"
a = [1, 1, 2, 3, 4, 4, 5]
print a.uniq
//has_any
print "has_any"
a = [1,2,3,4]
print a.has_any(2)
print a.has_any(5)
//min
print "min"
a = [1,2,3]
print
(Lst.lsort(coins, @f))
print
a.min
//max
print "max"
a = [1,2,3]
print a.max
listLib.src
Lst = {}
Lst
.to_list = function(
map,
shallow = false)
map
.to_list = function(shallow = false)
list = []
for i in
map
.indexes
if typeof(
map
[i]) == "map" then
for i in
self
.indexes
if typeof(
self
[i]) == "map" then
if shallow == true then
list.push([i,
map
[i]])
list.push([i,
self
[i]])
else
list.push([i,
Lst
.to_list
(map[i])
])
list.push([i,
self[i]
.to_list])
end if
else
list.push([i,
map
[i]])
list.push([i,
self
[i]])
end if
end for
return list
end function
L
st.to_map = function(
list
)
l =
list
[0:]
li
st.to_map = function()
l =
self
[0:]
map = {}
for i in indexes(l)
if typeof(l[i][1]) == "list" and l[i][1].len == 2 and typeof(l[i][1][0]) == "string" then
map[l[i][0]] =
Lst.to_map(
l[i][1]
)
map[l[i][0]] = l[i][1]
.to_map
else
map[l[i][0]] = l[i][1]
end if
end for
return map
end function
L
st.each = function(
obj,
func)
if typeof(obj) == "map" then
list =
Lst
.to_list(
obj,
true)
else
list = obj
end if
li
st.each = function(func)
result = self[0:] //list copy.
for i in indexes(self)
func(result[i])
end for
end function
map.each = function(func)
list =
self
.to_list(true)
result = list[0:] //list copy.
for i in indexes(list)
if typeof(obj) == "map" then
func(result[i][0], result[i][1])
else
func(result[i])
end if
func(result[i][0], result[i][1])
end for
end function
L
st.map = function(
list,
func)
result =
list
[0:] //list copy.
for i in indexes(
list
)
li
st.map = function(func)
result =
self
[0:] //list copy.
for i in indexes(
self
)
result[i] = func(result[i])
end for
return result
end function
L
st.reject = function(
list,
func)
result =
list
[0:] //list copy.
li
st.reject = function(func)
result =
self
[0:] //list copy.
i = 0
while i < result.len
if func(result[i]) == true then
result.remove(i)
continue
end if
i = i + 1
end while
return result
end function
L
st.select = function(
list,
func)
result = list[0:] //list copy.
i = 0
while i < result.len
if func(result[i]) == false then
result.remove(i)
continue
end
if
i = i + 1
end while
return
result
li
st.select = function(func)
f = function(o)
return not func(o)
end
function
return
self.reject(@f)
end function
// do not rename funcc to to func it will infinite loop
L
st.lsort = function(
list,
funcc)
li
st.lsort = function(funcc)
f = function(i)
return
Lst.to_map([[
"sort_key"
,
funcc(i)
], [
"obj"
, i]])
return
{
"sort_key"
:
funcc(i)
,
"obj"
: i}
end function
result =
Lst
.map(
list,
@f)
result =
self
.map(@f)
result = result.sort("sort_key")
f = function(i)
return i["obj"]
end function
return
Ls
t.map(
result,
@f)
return
resul
t.map(@f)
end function
L
st.flat = function(
list
)
li
st.flat = function()
result = []
for i in
list
for i in
self
if typeof(i) == "list" then
result = result +
Lst
.flat
(i)
result = result +
i
.flat
else
result.push(i)
end if
end for
return result
end function
L
st.uniq = function(
list
)
li
st.uniq = function()
result = []
for i in
list
for i in
self
if result.indexOf(i) == null then result.push(i)
end for
return result
end function
L
st.has_any = function(
list,
value)
for i in
list
li
st.has_any = function(value)
for i in
self
if i == value then return true
end for
return false
end function
L
st.min = function(
list
)
min =
list
[0]
for item in
list
li
st.min = function()
min =
self
[0]
for item in
self
if item < min then
min = item
end if
end for
return min
end function
L
st.max = function(
list
)
max =
list
[0]
for item in
list
if item
<
max then
li
st.max = function()
max =
self
[0]
for item in
self
if item
>
max then
max = item
end if
end for
return max
end function