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

简介:
class Song
  def initialize(format, name, title, duration)
    @format=format
    @name=name
    @title=title
    @duration=duration
  end
  
  attr_accessor :format, :name, :title, :duration
  
end

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

class SongList
  def initialize
    @songs=Array. new
     @index=WordIndex. new
  end
  
  def append(song)
    @songs.push(song)
     @index.add_to_index(song, song.title, song.name)
    self
  end
  
  def [](index)
    @songs[index]
  end
  
  def length
    @songs.length
  end
  
  def lookup(word)
    @index.lookup(word)
  end
end

f=File.open('test')
songs=SongList. new
f.each  do |line|
  format, duration, name, title= line.split(/\s*\|\s*/)
  song=Song. new(format, name, title, duration)
  songs.append(song)
end

(0..songs.length-1).each  do  |n|
 puts   "#{songs[n].format}--#{songs[n].name}--#{songs[n].duration}--#{songs[n].title}"
end
puts songs.lookup('fats')
puts songs[0].name
输出结果:Fats   Waller
----




本文转自 fsjoy1983 51CTO博客,原文链接:http://blog.51cto.com/fsjoy/65638,如需转载请自行联系原作者
目录
相关文章
|
5月前
|
SQL 安全 数据库
Ruby on Rails 数据库迁移操作深度解析
【7月更文挑战第19天】Rails 的数据库迁移功能是一个强大的工具,它帮助开发者以版本控制的方式管理数据库结构的变更。通过遵循最佳实践,并合理利用 Rails 提供的迁移命令和方法,我们可以更加高效、安全地管理数据库结构,确保应用的稳定性和可扩展性。
|
7月前
|
数据安全/隐私保护 Ruby 索引
|
7月前
|
存储 Ruby
|
7月前
|
Ruby
|
7月前
|
存储 Ruby
|
存储 Java 测试技术
Ruby 字符串从 1.8 到 2.5 的演变
Ruby 字符串从 1.8 到 2.5 的演变
Ruby 字符串从 1.8 到 2.5 的演变
|
JavaScript 前端开发 UED
|
JavaScript 数据库 Ruby
【Ruby on Rails全栈课程】4.1 点赞功能
1、功能描述: (1)一个用户对同一帖子只能点赞一次,点击第二次是取消赞 (2)用户不刷新页面的时候,点赞时当前页面相应贴子的点赞数+1,图标变成fa-thumbs-up,取消赞时当前页面相应帖子的点赞数-1,图标变成fa-thumbs-o-up,不受其他用户同时点赞操作的影响,这需要js来控制。 C、用户必须登录才能给帖子点赞。没有登录的话,点赞需要提醒登录。(在3.10章第3节已经实现了 if @current_user)
163 0
【Ruby on Rails全栈课程】4.1 点赞功能
|
数据安全/隐私保护 Ruby
【Ruby on Rails全栈课程】3.8 权限管理之超级管理员审批功能实现
Rails提供一个叫做cancan的权限管理的插件,可以用来做权限控制,不过我们项目的权限管理不通过这个gem插件实现,通过控制用户角色字段来控制权限,这样灵活性比较大。
361 0
【Ruby on Rails全栈课程】3.8 权限管理之超级管理员审批功能实现
|
存储 Web App开发 数据库
【Ruby on Rails全栈课程】3.6 登录功能--session、cookie
1、功能描述 (1)登录需要填写信息:邮箱、密码。当邮箱没有注册需要进行相应的提示。 (2)将数据库保存的密码解密后,与用户在页面输入的密码作对比,相同可登录。 (3)用户角色为管理员时,需要判断这个账号的状态,状态为未激活时(status为1),需要flash.notice提醒激活。 2、编辑controller、view、路由 (1)在路由文件config/routes.rb中添加路由,通过此链接来提交在登录页面提交的信息
215 0
【Ruby on Rails全栈课程】3.6 登录功能--session、cookie