将列表[1,2,3,4]转换为地图 的优雅,高效的方法是%{1=>2, 3=>4}什么?我写了这个:
Enum.reduce([1,2,3,4],%{}, fn(item, acc) ->
case Map.get(acc, :last) do
nil ->
Map.put(acc, :last, item)
last ->
acc = Map.put(acc, item, last)
Map.drop(acc, [:last])
end
end)
Run Code Online (Sandbox Code Playgroud)
但这似乎并不优雅.这样做有更优雅,更清洁的方式吗?
我正在使用惊人的Phoenix Web Framework并试图找出如何为具有数组字段的模型创建表单字段.
以下是模型中的示例字段:
field :grateful, {:array, :string}
我已经尝试生成这样的字段:
<%= inputs_for f, :grateful, fn fp -> %>
<%= text_input fp, :grateful %>
<% end %>
但我得到了这个错误:无法生成输入:感激来自Motivation.DailyPost.检查该字段是否存在,它是embeds_one,embeds_many,has_one,has_many,belongs_to或many_to_many之一
如果我生成这样的字段:<%= text_input fp, :grateful %>它生成一个名称为的表单字段:daily_post[grateful]实际上不起作用.我需要daily_post[grateful][].
下面的代码有效,但保存后加载数据不起作用.所有数组值都合并到一个输入字段中.
<div class="form-group" id="grateful-group">
<%= label f, :grateful, class: "control-label" %>
<%= text_input f, :grateful, name: "daily_post[grateful][]" %>
<%= error_tag f, :grateful %>
<input type="button" class="btn btn-success" id="add-grateful" value="add" />
<script>
window.onload = () => {
$('#add-grateful').click((e) => {
$('<input type="text" name="daily_post[grateful][]" />').appendTo("#grateful-group"); …
我正在写一个将RNA转换为DNA的函数。输入以字符列表形式出现:'ATCG'因此我遍历每个字母并使用映射来获取转换后的字母。简单。
问题是枚举字符列表后,我无法将其合并回字符列表。Enum.join返回一个字符串,to_charlist只返回一个字符点列表,我看不到其他任何可以帮助的函数。
这是我的代码:
def to_rna(dna) do
dna_to_rna = %{
'G' => 'C',
'C' => 'G',
'T' => 'A',
'A' => 'U'
}
Enum.map(dna, fn(letter) ->
Map.get(dna_to_rna, [letter])
end)
end
Run Code Online (Sandbox Code Playgroud)
这将输出一个字符列表: ['U', 'G', 'C']。如何将此列表转换为字符列表:'UGC'?