我正在研究Number shuffle https://rubymonk.com/learning/books/1-ruby-primer/problems/154-permutations#solution4802的问题。练习要求:
返回可以形成的所有唯一数字的排序数组 有3或4位数。
练习下面有一个解决方案(参见解决方案),如下所示:
def number_shuffle(number)
no_of_combinations = number.to_s.size == 3 ? 6 : 24
digits = number.to_s.split(//)
combinations = []
combinations << digits.shuffle.join.to_i while
combinations.uniq.size!=no_of_combinations
combinations.uniq.sort
end
我有几个问题,任何人都可以解释我:
1)'no_of_combinations'变量是什么意思'3? 6:24'?我认为3是数字中的位数。问号(?)是'if'的符号 - 如果数字是3,则数字量在组合数组中将是6。冒号(标点符号)是符号符号,但我不知道为什么24,有23个符号考虑组合数组中的空格。
2)它是什么意思&lt;&lt;组合后的符号?我知道这是附加标志,但它在这里做了什么?而且,在以下字符串中'size'之后的感叹号是什么意思?
答案 0 :(得分:0)
1)in_of_no_combinations&#39;变量是什么意思&#39; 3? 6:24&#39;?
表达式需要包含比较才有意义。 。
number.to_s.size == 3 ? 6 : 24
这是ternary if。如果?
之前的比较为真,则计算为第一个值(此处为6
),如果为false,则计算为第二个值(此处为24
)。它与文字Symbol
值无关。 。 。事实上,Ruby解析器总是将冒号视为值分隔符,但是你将其分隔开来。
此运算符的语法最初来自C,您会发现它被复制到许多其他语言中。
2)它是什么意思&lt;&lt;组合后的符号?我知道这是附加标志,但它在这里做了什么?
这不是一个额外的标志。此运算符根据对象的类(左侧)执行不同的操作。在此示例中,这是Array
,<<
将右侧的对象推送到数组的末尾。它几乎与push
以及“尺寸&#39;之后的感叹号”是什么意思在以下字符串中?
在这种情况下,它是!=
的一部分,或者#34;不等于&#34;比较运算符。原作者可以通过一些空格使这个更清晰。