我正在尝试将数字的各个数字的所有唯一组合放入数组中。我传入一个整数,然后使用置换方法。但要这样做,我相信我需要将数字参数转换为字符串。但是,当我遍历数组时,它没有加入字符串,以便我可以转换为整数。另外我意识到我应该使用each
来执行循环而不是for
但不知道如何在块中执行此操作。
def number_shuffle(number)
combo = []
combo = number.to_s.split("").permutation.to_a
for i in combo
i.join.to_i
end
return combo
end
我的循环有问题吗?当我使用combo[0].join.to_i
测试数组中的一个项时,我得到一个整数作为输出。但由于某种原因,我的循环将这些作为字符串。
答案 0 :(得分:2)
在您的示例尝试中,您无法修改数组的内容。我已经通过调用for
替换了您的Array#map
循环,def number_shuffle(number)
permutations = number.to_s.split('').permutation
numbers = permutations.map do |digits|
digits.join.to_i
end
return numbers
end
number_shuffle 123 # => [123, 132, 213, 231, 312, 321]
的返回值包含按顺序包含每次迭代结果的新数组。这是您想要的方法的详细版本(为了清楚起见)。
split
如果您更喜欢单行(将chars
替换为def number_shuffle(n)
n.to_s.chars.permutation.map {|x| x.join.to_i }
end
,请按下面的@timbetimbe):
from collections import defaultdict, OrderedDict
result_dict = defaultdict(OrderedDict)
data = [('Han Decane','12333'),('Can Decane','12333'),('AlRight','10110')]
for (v,k) in data:
result_dict[k][v]=True
>>> list(result_dict['12333'].keys())
['Han Decane', 'Can Decane']
答案 1 :(得分:2)
你的for
循环不会改变combo
的原因是因为它对它没有任何作用。解释器只评估i.join.to_i
,但不会编辑适当的值。
其次,您不需要在for
的回复中使用return
,split('')
,to_a
或permutation
,因为它们不是真正惯用的方法。更简洁的方法是:
def number_shuffle(number)
number.to_s.chars.permutation.map { |combo| combo.join.to_i }
end
推理:
each
优先于for
,因为它在社区中是首选。map
中的permutation
,因为它包含Enumerable
(与Array
相同),因此您可以直接跳到map
returns
是隐含的,接受:)Linters在入门时提供了极大的帮助:Rubocop
此样式指南由以下人员强制执行:bbatsov's Style Guide
答案 2 :(得分:1)
更快更有效(不必在内存中复制任何内容):
def number_shuffle(number)
number.to_s.split('').permutation.to_a.map do |combination|
combination.join.to_i
end
end