我目前正在编写Codecademy中的Ruby课程以及'哈希和符号'部分。这是我正在使用的代码:
strings = ["HTML", "CSS", "JavaScript", "Python", "Ruby"]
symbols = []
strings.each do |x|
if x =='s'
x.to_sym!
symbols.push(x)
end
end
此代码的目的是在符号变量中添加字符串元素,如果' s'在字符串中遇到。但是,代码没有通过。我看了一个解决方案,发现了这个:
strings = ["HTML", "CSS", "JavaScript", "Python", "Ruby"]
symbols = []
strings.each do |s|
s= s.to_sym
symbols.push(s)
end
我的问题是,Ruby是否接受了实际的'在数组中。这对我来说似乎很难编码???
答案 0 :(得分:0)
您发布的Codeacademy的解决方案并没有真正解决您解释的问题。实际的解决方案看起来像这样
strings = ["HTML", "CSS", "JavaScript", "Python", "Ruby"]
symbols = []
strings.each do |s|
if s.downcase.include? 's'
s= s.to_sym
symbols.push(s)
end
end
答案 1 :(得分:0)
我会写这样的东西:
strings = ["HTML", "CSS", "JavaScript", "Python", "Ruby"]
symbols = strings.select { |s| s =~ /s/i }.map(&:to_sym)
#=> [:CSS, :JavaScript]
说明:
select
选择需要条件的数组的所有元素。这个例子的条件是:字符串s
应匹配不区分大小写的正则表达式/s/i
(也就是字符串包含' s' S') 。那就是strings.select { |s| s =~ /s/i }
会返回['CSS', 'JavaScript']
。
map(&:to_sym)
返回数组,但首先在每个元素上调用to_sym
。
另一种选择可能是:
symbols = strings.map { |s| s.to_sym if s =~ /s/i }.compact
答案 2 :(得分:0)
好像你实际上是想把每个字符串变成一个符号。如果是这种情况,运行每个方法只会忽略任何's'。要了解工作解决方案中实际发生了什么,让我们先解决您的解决方案。
strings = ["HTML", "CSS", "JavaScript", "Python", "Ruby"]
symbols = []
strings.each do |x|
#So, if x is equal to a Class String of S
if x =='s'
#Turn that x into a symbol, which none of them should work
x.to_sym!
symbols.push(x)
end
end
这是你说的代码。
strings = ["HTML", "CSS", "JavaScript", "Python", "Ruby"]
symbols = []
#Similar each loop, but they used s and not x
strings.each do |s|
#Instead of checking whether there is a Class String of S, it is just
#turning each value in the array into a symbol and pushing to the
#symbols array
s= s.to_sym
symbols.push(s)
end
因此,总而言之,除非数组中有's'
,否则您的代码将永远不会工作,可能有s但不是带有s的单个字符串。后者有效,因为它在没有if语句的情况下更改它们。
CNC中
我查看了代码学院的问题,我可以看到混淆来自何处,这是这条指令For each s in strings, use .to_sym to convert s to a symbol.
这有点令人困惑的伪代码,但让我重新格式化,以便你可以看到混乱发生的地方{{1}所以目标是使用strings.each |s| { s = s.to_sym }
作为空变量。您不需要检测s
,只需将其用作空变量。