当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


Ruby Hash转Object用法及代码示例


在本文中,我们将讨论如何将哈希转换为对象红 gems 。将哈希转换为对象允许人们将哈希键作为对象属性进行访问,从而为他们提供了一种更直观的数据处理方式。

使用OpenStruct

OpenStruct是一个 Ruby 标准库,提供类似于 Hash 的数据结构,但能够将键作为属性进行访问。

用法:

require ‘ostruct’

object = OpenStruct.new(hash)

例子:

在此示例中,我们创建一个OpenStruct对象 person来自包含有关人的信息的哈希。然后我们可以使用点表示法访问 person 对象的属性,使代码更具可读性。

require 'ostruct'

# Hash containing person information
person_hash = { name: 'John', age: 30, city: 'New York' }

# Convert hash to object using OpenStruct
person = OpenStruct.new(person_hash)

# Accessing attributes of the object
puts "Name: #{person.name}"   
puts "Age: #{person.age}"     
puts "City: #{person.city}"

输出
Name: John
Age: 30
City: New York

使用结构体

Struct 是一个内置的 Ruby 类,允许您创建具有指定属性的新类。

用法:

ClassName = Struct.new(:attribute1, :attribute2, …)

object = ClassName.new(hash[:key1], hash[:key2], …)

例子:

在这个例子中我们定义了一个Struct类Person有属性name,age, 和city。然后,我们创建一个新对象person从包含人员信息的哈希中,将每个值作为参数传递。

# Define a Struct class with attributes
Person = Struct.new(:name, :age, :city)

# Hash containing person information
person_hash = { name: 'John', age: 30, city: 'New York' }

# Convert hash to object using Struct
person = Person.new(*person_hash.values)

# Accessing attributes of the object
puts "Name: #{person.name}"   
puts "Age: #{person.age}"    
puts "City: #{person.city}"

输出
Name: John
Age: 30
City: New York

U唱哈希#each

Hash#each 方法允许迭代哈希并动态定义对象的属性

用法:

object = Object.new

hash.each { |key, value| object.define_singleton_method(key) { value } }

例子:

在此示例中,我们创建一个新的空对象并迭代哈希。对于哈希中的每个键值对,我们动态地在对象上定义一个方法,以键作为方法名称,以值作为返回值。

# Hash containing person information
person_hash = { name: 'John', age: 30, city: 'New York' }

# Create an empty object
person = Object.new

# Define attributes dynamically from hash
person_hash.each { |key, value| person.define_singleton_method(key) { value } }

# Accessing attributes of the object
puts "Name: #{person.name}"   # Output: Name: John
puts "Age: #{person.age}"     # Output: Age: 30
puts "City: #{person.city}"   # Output: City: New York

输出
Name: John
Age: 30
City: New York


相关用法


注:本文由纯净天空筛选整理自abhaystriver大神的英文原创作品 How to convert Hash to Object in Ruby?。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。