Ruby String类(二)

 
1.       根据部分构建字符串
问题:要在某个数据结构上进行迭代,有次从中构建一个字符串
解决方案:
1) 从空字符串开始使用<<操作符重新向上追加字串:
hash = {“key” => ”vall”, “key2” => “val2”}
string = “”
hash.each{ |k,v| string << “#{k} is #{v}/n”}
2) String = “”
hash.each{ |k,v| string << k << “is” << v << “/n”
如果数据结构是数组或者被简单地转换为数组,那么使用Array#join通常会更高效:
puts hash.keys.join(“/n”) + “/n”
Java Python 语言中,字符串是不可变的,构建字符串的方法是将字串放入一个数组或者另一个可变的数据结构中,它可以动态地扩展。但是 Ruby 中,字符串与数组一样是可变的
Ruby对这一问题最快的解决方案通常是放弃现有的数组并将字串直接附加在一个基本字符串上。通常Array#join通常会更高效,但使用<<更易于理解。
@既然选择Ruby,还是用Ruby惯用的方法比较好,<<是C++和Java风格。
如果效率很重要,则str << ‘a’ + ‘b’ or str << “#{val1}” “#{val2}””的构造会产生立刻又被更大字符串包含的新字符串,效率低。可使用str << varl << ‘ ‘ << val2代替。
@记得调试时首先要定义str = ‘’,否则会出现未定义的变量或方法的Error。
         !!Array#join与简单的数组上迭代构建字符串方法不同,它不在数组的最后一个元素后插入分隔符字符串。可以用Enumerable#each_with_index并忽略最后索引上的分隔符。当然,得知道确切长度。
         S = ‘’
         Data = {‘1’, ‘2’, ‘3’}
         data.each_with_index { |x, i| s << x;s << “|”  if i < data.length – 1}
        
2.       将变量带入字符串
问题:要创建一个包含Ruby变量或表达式表示的字符串。
解决方案:
在字符串中,变量或表达式被括进花括号并以hash字符为前缀:
Number = 5
“The number is #{number}.”
“The number is #{5}.”
”The number after #{number} is #{number.next}.”
 
任何以特殊标记#{}括起的文本都被理解为一个Ruby表达式,该表达式的结果被替代为要创建的字符串。 如果表达式的结果不是字符串,那么 Ruby 调用其 to_s 方法代替。
可以使用字符串插入来运行字符串内的大量Ruby代码。
%{Here is #{class InstantClass
def bar
         “Some Bar”
         end
end
InstantClass.new.bar     #写这个例子主要是为这一句,声明了一个实例
}.}
“here document”结构是%{}的另一种选择。
记得类的首字母要大些。
“I’ve set x to #{x = 5, x +=1.}”          => “I’ve set x to 6.”
!!Ruby语言没有x++。
 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值