我正在努力解决这个问题。
将一个名为add_index的方法添加到Array类中。该方法应该获取元素位置的索引值,并将其添加到相同位置的String中。
提示:each_with_index方法应该可以帮助您解决此问题。尝试在Ruby Docs中自己找到each_with_index方法,并了解它是如何使用的。
这是我当前的代码:**我没有创建完整的类或使用self,我只是测试self如何使用变量a。在测试中,自我通过“这是一个测试”。
new-host:~$ irb
2.0.0p247 :001 > a = "This is a test"
=> "This is a test"
2.0.0p247 :002 > a.split.join.downcase
=> "thisisatest"
2.0.0p247 :003 > a.split
=> ["This", "is", "a", "test"]
#Should I do something with the array first? I could pass them into a code block to call the .capitalize method on them...with this in mind I am not sure how to skp the [0] of the array.
2.0.0p247 :004 > a.split.join.downcase[0..3]
=> "this"
2.0.0p247 :005 > a.split.join.downcase.capitalize
=> "Thisisatest"
最终我需要“这是一个测试”看起来像“thisIsATest”。我一直试图解决这个问题一段时间了。如果有人能提供一些见解我会很感激。谢谢!
我有一个想法是做这样的事情:
a.split.each do |num| num.to_s.downcase
2.0.0p247 :010?> end
#I know this isn't right but from the syntax I know I think doing something like this is a step in the right direction.
“这是一个测试”是通过测试的原因:
describe "String" do
describe "camel_case" do
it "leaves first word lowercase" do
"test".camel_case.should eq("test")
end
it "should lowercase first letter if it isn't" do
"Test".camel_case.should eq("test")
end
it "should combine words using camel case" do
"This is a test".camel_case.should eq("thisIsATest")
end
end
end
我为我的方法排除了String类和def camel_case。我只是想测试我方法的代码块。
答案 0 :(得分:3)
def camel_case(str)
str.downcase.split.each_with_index.map { |v,i| i == 0 ? v : v.capitalize }.join
end
或强>
def camel_case(str)
words = str.downcase.split
words.shift + words.map(&:capitalize).join
end
puts camel_case('This is a test')
<强>输出强>
thisIsATest
答案 1 :(得分:1)
这就是我解决camelcase问题的方法
a = "This is a test"
a.split.map(&:capitalize}.join
"ThisIsATest"
a.split.each_with_index.map { |i, el| (i.capitalize unless el.eql? 0) || i.downcase}.join
或
str = "This is a test".split
str[0].downcase + str[1..-1].map(&:capitalize).join
答案 2 :(得分:0)
a.split.map(&:capitalize).join
@edit:使用gsub
a.gsub(/ \w+/) { |w| w.strip.capitalize }.gsub(/^\w/) {|w| w.downcase }
答案 3 :(得分:0)
这是一种方式......
s_original = "This is a test"
s_converted = ""
s_original.downcase.split(" ").each_with_index {|word, i| s_converted = "#{s_converted}#{if i > 0 then word.capitalize! else word end}"}
puts s_original #=> "This is a test"
puts s_converted #=> "thisIsATest"
答案 4 :(得分:0)
您需要each_with_index
来区分第一个单词和其他单词。类似的东西:
"This is a test".split.each_with_index.map { |word, index|
if index == 0
# transform first word
else
# transform other words
end
}.join
第一次转化可能是word.downcase
,另一次转化可能是word.capitalize
。
答案 5 :(得分:0)
这应该可以解决问题。
a = "This is a test".split.map!(&:capitalize).join.sub!(/^\w{1}/) { |first| first.downcase }
答案 6 :(得分:0)
这是另一种方法:
def camel_case(str)
ary = str.split
ary[0].downcase + ary[1..-1].map(&:capitalize).join
end
example用法:
camel_case "This is a test"
# => "thisIsATest"
参考:
答案 7 :(得分:0)
最简单的方法:
"This is a test".tr(' ','_').camelize(:lower)
# "thisIsATest"