ruby 操作字符串 实现关键字搜索功能

简介:
InBlock.gif class Song
InBlock.gif  def initialize(format, name, title, duration)
InBlock.gif    @format=format
InBlock.gif    @name=name
InBlock.gif    @title=title
InBlock.gif    @duration=duration
InBlock.gif  end
InBlock.gif  
InBlock.gif  attr_accessor :format, :name, :title, :duration
InBlock.gif  
InBlock.gifend
InBlock.gif
class WordIndex
  def initialize
    @index={}
  end
  
  def add_to_index(obj, *phrases)
    phrases.each do|phrase|
      phrase.scan(/\w[-\w'']+/) do |word|
        word.downcase!
        @index[word]=[] if @index[word].nil?
        @index[word].push(obj)
      end
    end
  end
  
  def lookup(word)
    @index[word.downcase]
  end
end
InBlock.gif
class SongList
InBlock.gif  def initialize
InBlock.gif    @songs=Array. new
InBlock.gif     @index=WordIndex. new
InBlock.gif  end
InBlock.gif  
InBlock.gif  def append(song)
InBlock.gif    @songs.push(song)
InBlock.gif     @index.add_to_index(song, song.title, song.name)
InBlock.gif    self
InBlock.gif  end
InBlock.gif  
InBlock.gif  def [](index)
InBlock.gif    @songs[index]
InBlock.gif  end
InBlock.gif  
InBlock.gif  def length
InBlock.gif    @songs.length
InBlock.gif  end
InBlock.gif  
InBlock.gif   def lookup(word)
InBlock.gif     @index.lookup(word)
InBlock.gif   end
InBlock.gifend
InBlock.gif
f=File.open('test')
InBlock.gifsongs=SongList. new
InBlock.giff.each  do |line|
InBlock.gif  format, duration, name, title= line.split(/\s*\|\s*/)
InBlock.gif  song=Song. new(format, name, title, duration)
InBlock.gif  songs.append(song)
InBlock.gifend
InBlock.gif
(0..songs.length-1).each  do  |n|
InBlock.gif puts   "#{songs[n].format}--#{songs[n].name}--#{songs[n].duration}--#{songs[n].title}"
InBlock.gifend
InBlock.gifputs songs.lookup('fats')
InBlock.gifputs songs[0].name
输出结果:Fats   Waller
----




本文转自 fsjoy1983 51CTO博客,原文链接:http://blog.51cto.com/fsjoy/65638,如需转载请自行联系原作者
目录
相关文章
|
1月前
|
Ruby
|
1月前
|
数据安全/隐私保护 Ruby 索引
|
1月前
|
存储 Ruby
|
1月前
|
存储 Ruby
|
9月前
|
存储 Java 测试技术
Ruby 字符串从 1.8 到 2.5 的演变
Ruby 字符串从 1.8 到 2.5 的演变
Ruby 字符串从 1.8 到 2.5 的演变
|
JavaScript 前端开发 Ruby
【Ruby on Rails全栈课程】4.7 评论功能实现(六)--其他回复展开
、描述 每条评论下面的回复条数最多显示两条,多于两条,回复下面会显示「更多n条回复 ↓」链接,每次点击此链接,展开8条回复,页面不刷新,需要配合ajax和js实现。 2、实现功能 (1)在routes.rb文件中添加路径,加上两个参数,:comment_id为回复所属的评论的id,point为此次点击为第几次点击
192 0
|
JavaScript 前端开发 UED
|
JavaScript 前端开发 Ruby
【Ruby on Rails全栈课程】4.5 评论功能实现(四)--创建评论、另一种传参方式
【Ruby on Rails全栈课程】4.5 评论功能实现(四)--创建评论、另一种传参方式
175 0
|
前端开发 JavaScript Ruby
【Ruby on Rails全栈课程】4.4 评论功能实现(三)--分页(插件Kaminari)
1、实现分页功能我们需要使用“kaminari”插件,我们先来安装一下 (1)粘贴下面代码到Gemfile文件中
207 0
|
JavaScript Ruby
【Ruby on Rails全栈课程】4.3 评论功能实现(二)--创建帖子详情页面
1、完善样式,用来显示帖子详情以及评论信息等,编辑app/assets/stylesheets/posts.scss文件,在原有代码下面添加代码:
119 0