programmingruby:Programming Ruby——数组 哈希表和控制结构

  和哈希表

  Ruby和哈希表是索引集合两都都是保存对象集合并能通过键来读取键是数字但是哈希表则支持对象作为键它们都是随着新元素加入要增长在访问元素方面效率比较高但哈希表更加灵活无论是还是哈希表都能保存区别类型对象;你可以使用保存数字串和浮点数就像你等会将会看到那样

  你可以使用文本来创建和个新——个由中括号包围元素集合对于你能通过使用中括号间数字来获取每个元素就如例子所演示那样要注意Ruby是从0开始

  a = [ 1, 'cat', 3.14 ] # .gif' /> with three elements
  # access the first element
  a[0]-> 1
  # the third element
  a[2] = nil
  # dump out the .gif' />
  a-> [1, "cat", nil]


  你可能已经注意到我们在例子中使用了个特殊值nil在许多语言中nil概念(或者null)是"没有对象"在Ruby中不是这样子;nil是个对象就和其它对象样;它代表什么都没有不管怎样让我们回到和哈希表吧

  有时候创建单词是件痛苦事情它包含了许多引号和逗号幸运Ruby有个快捷方式:%w能使用我们只做我们想做

  a = [ 'ant', 'bee', 'cat', 'dog', 'elk' ]
  a[0]-> "ant"
  a[3]-> "dog"
  # this is the same:
  a = %w{ ant bee cat dog elk }
  a[0]-> "ant"
  a[3]-> "dog"


  Ruby哈希表和很相似哈希表使用花括号而不是中括号哈希表需要为每个项提供两个对象:个是键个是它

  例如你想为乐队表示音乐器材你可以使用哈希表来实现它

  inst_section = {
  'cello' => '',
  'clarinet' => 'woodwind',
  'drum' => 'percussion',
  'oboe' => 'woodwind',
  'trumpet' => 'brass',
  'violin' => ''
  }


  在=>左边是键在右边是它对应键在每个具体哈希表中是唯你不能有两个"drum"项键和值在哈希表中可以是任意对象——你可以哈希甚至其它哈希表等等

  哈希表使用和中括号索引

  inst_section['oboe']-> "woodwind"
  inst_section['cello']-> ""
  inst_section['bassoon']-> nil


  就如最后个例子中所看到如果键不存在哈希表默认是返回nil通常这样做很方便在使用条件表达式中nil意思是false有时候你想要改变这个默认值例如你想计算哈希表中键访问次数如果默认值是0就比较方便了当你创建个新哈希表时很容易指定个默认值

  histogram = Hash.(0)
  histogram['key1']-> 0
  histogram['key1'] = histogram['key1'] + 1
  histogram['key1']-> 1


  控制结构

  Ruby拥有所有常用控制结构语句和while循环JavaC和Perl语句体中缺少花括号而出错替代Ruby使用关键字end来表示语句体结束

   count > 10
    puts "Try again"
  els tries 3
    puts "You lose"
  
    puts "Enter a number"
  end


  类似while语句也是使用end结束

  while weight < 100 and num_pallets <= 30
    pallet = next_pallet
    weight pallet.weight
    num_pallets 1
  end


  Ruby中大部分声明都有个返回值你可以使用它作为条件语句例如gets思路方法从标准输入流中返回下行或者当到达文件末尾时返回nil在条件语句中Ruby把nil看成是false你可以使用下面代码来处理文件所有行

  while line = gets
    puts line.down
  end


  这里这个声明设置变量line值为下行或nil然后while检测这个变量当它为nil时结束循环

  当或while声明只有行代码时Ruby代码修饰符是个有用简化只需要在表达式后面写上简单条件语句例如下面是个简单代码愉

   radiation > 3000
    puts "Danger, Will Robinson"
  end


  再次这个代码使用代码修饰符重写它

  puts "Danger, Will Robinson" radiation > 3000

  while循环类似代码如下:



  square = 2
  while square < 1000
    square = square*square
  end


  变得更简洁

  square = 2
  square = square*square while square < 1000


  这个代码修饰符和Perl看起来比较熟悉



Tags:  programmingruby

延伸阅读

最新评论

发表评论