使用Number shuffle排序数组

时间:2015-03-21 16:06:40

标签: ruby

我正在研究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'之后的感叹号是什么意思?

1 个答案:

答案 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;比较运算符。原作者可以通过一些空格使这个更清晰。