您如何组织/读取大量数据?

genx1mx6

我有大量数据另存为Data :: Dumper输出。

我应该如何读取这些数据?我想对其进行重组,但是我完全迷失了这种方法。数据结构是数组中的哈希,它们是哈希的哈希...

这是一个(非常精简的)示例。另外,创作也不是很好,因为角色可以有两个“攻击”或两个“特殊”,所以很明显这是一次碰撞,一个将被覆盖。

编辑:我真正要问的是:这是存储数据的理想方式吗?或者,还有更好的方法?因为对我来说,访问哈希$char_hash{Character Name}{abilities}{attack}{tiers}{level 1}{description}似乎很难写。遍历像@{$char_hash{Character Name}{Equipment}{Equipment Level 1}{Items}}疯狂的事情

my @char_hash = (
"Character Name" => {
            "description" => "",
            "alignment" => "",
            "categories" => [
                "ex 1",
                "ex 2",
                "ex 4",
                "ex 5"
            ],
            "primaryStat" => "Strength (STR)",
            "baseStats" => {
                "Strength (STR)" => "22",
                "Agility (AGI)" => "15",
                "Intelligence (INT)" => "17",
                "Speed" => "100",
                "Health" => "197",
                "Physical Damage" => "17"
            },
            "abilities" => {
                "attack" => {
                    "name" => "ex 1",
                    "type" => "Physical",
                    "tiers" => {
                        "level 1" => {
                            "description" => ""
                        },
                        "level 2" => {
                            "unlockLevel" => 16,
                            "cost" => {
                                "Money" => 700,
                                "Material" => 3
                            },
                            "fromPrevious" => "+5% Damage",
                            "description" => ""
                        }
                    },
                    "conditions" => {
                    }
                },
                "special" => {
                    "name" => "ex",
                    "cooldown" => 3,
                    "type" => "special",
                    "tiers" => {
                        "level 1" => {
                            "description" => ""
                        },
                        "level 2" => {
                            "unlockLevel" => 18,
                            "cost" => {
                                "Money" => 1300,
                                "Material" => 2
                            },
                            "fromPrevious" => "+5% Damage",
                            "description" => ""
                        }
                    },
                    "conditions" => {
                    }
                },
            "Equipment" => {
                "Equipment Lvl I" => {
                    "cummulatedStats" => {
                        "Strength (STR)" => "+22",
                        "Agility (AGI)" => "+15",
                        "Intelligence (INT)" => "+17",
                        "Speed" => "+100",
                        "Health" => "+197",
                        "Physical Damage" => "+17"
                    },
                    "items" => [
                        {
                            "name" => "",
                            "id" => "",
                            "tier" => 1,
                            "mark" => "",
                            "requiredLevel" => 1,
                            "sellValue" => 10,
                            "stats" => {
                                "Physical Damage" => ""
                            }
                        },
                        {
                            "name" => "",
                            "id" => "",
                            "tier" => 1,
                            "mark" => "",
                            "requiredLevel" => 2,
                            "sellValue" => 20,
                            "stats" => {
                                "Strength (STR)" => "",
                                "Agility (AGI)" => "",
                                "Intelligence (INT)" => ""
                            }
                        },
                        {
                            "name" => "",
                            "id" => "",
                            "tier" => 1,
                            "mark" => "",
                            "requiredLevel" => 2,
                            "sellValue" => 20,
                            "stats" => {
                                "Strength (STR)" => "",
                                "Agility (AGI)" => "",
                                "Intelligence (INT)" => ""
                            }
                        },
                        {
                            "name" => "",
                            "id" => "",
                            "tier" => 1,
                            "mark" => "",
                            "requiredLevel" => 2,
                            "sellValue" => 20,
                            "stats" => {
                                "Speed" => ""
                            }
                        },
                        {
                            "name" => "",
                            "id" => "",
                            "tier" => 1,
                            "mark" => "",
                            "requiredLevel" => 2,
                            "sellValue" => 20,
                            "stats" => {
                                "Strength (STR)" => ""
                            }
                        },
                        {
                            "name" => "",
                            "id" => "",
                            "tier" => 1,
                            "mark" => "",
                            "requiredLevel" => 2,
                            "sellValue" => 20,
                            "stats" => {
                                "Armor" => ""
                            }
                        }
                    ]
                }
            }
        }
}
);
清醒

我会说,有更好的方法。

答案是-使用面向对象的代码。如果您还没有真正认识到OO,那么它听起来可能会令人生畏-而且有很多Java或C ++程序员都喜欢这样做。

实际上是一个数据结构,其中包含“内置”代码以对其进行操作。这些代码位称为“方法”,适用于对象。

所以-采取上述措施。您具有“字符”和“设备”作为“对象”的清晰示例。

#!/usr/bin/env perl

package MyStuff::Character;

use strict;
use warnings;

sub new { 
   my ( $class, $name ) = @_;
   my $self = {}; 
   $self -> {name} = $name;
   bless $self, $class; 
   return $self; 
}

sub set_attr { 
   my ( $self, $attr, $value ) = @_; 
   $self -> {attr} -> {$attr} = $value;
}

sub get_attr { 
   my ( $self, $attr ) = @_;
   return $self -> {attr} -> {$attr}; 
}

sub get_name { 
   my ( $self ) = @_;
   return $self -> {name}; 
}

sub add_item {
   my ( $self, $item_ref ) = @_; 
   push ( @{ $self -> {items} }, $item_ref ); 
}

sub inventory {
  my ( $self ) = @_; 
  return @{$self->{items}};
}

package MyStuff::Items;

sub new {
    my ( $class, $name, $type ) = @_; 
    my $self = {};
    $self -> {name} = $name; 
    $self -> _set_type($type); 
    bless $self, $class;
    return $self; 
}

sub get_name {
   my ( $self ) = @_;
   return $self -> {name};
}

sub _set_type {
   my ( $self, $type ) = @_; 
   $self -> {type} = $type;
   if ( $type eq "sword" ) { 
       $self -> {attack_bonus} = "+10"; 
   }
}

package main; 

use strict;
use warnings;

my $character = MyStuff::Character -> new ( "Joe Beefcake" ); 
$character -> set_attr('STR', 9000); 

print $character -> get_name, " has STR ", $character -> get_attr('STR'),"\n";

my $new_sword = MyStuff::Character -> new ( "Hackmaster", "sword"); 
$character -> add_item( $new_sword ); 

print "And is carrying:\n";
foreach my $item ( $character -> inventory ) {
    print $item -> get_name,"\n";
}

这是一个非常基本的示例,但是希望说明一种处理复杂数据结构的新方法吗?

具体来说-我们将不需要的东西“交给”要照顾的对象,并使用方法与之交互。因为项目是一个自包含的对象,所以它“知道”它的状态。您可以将其拿走,然后“交给”另一个角色。

这样做的另一个好处是继承。我有一个非常通用的“项目”对象。每个项目都会有您可能要处理的事情-拿起它们,随身携带,出售,然后交给其他人。

但是您可以创建一个“武器”类,该类继承“物品”类(因此您仍然可以给别人用剑),还增加了一些额外的东西-例如攻击力,熟练程度要求,攻击力,等等。

对象定向的概念并不是一个新概念,但在perl中并不常见。perldoc perlobj一些基础知识。

还有一些软件包可以帮助完成该过程(上述工作独立运行),例如Moose

对于“保存”和“加载”-有很多可能的选择,而且要视情况而定。

可能会通过“字符”和“项目”分别序列化为JSON,然后重新加载/验证来解决。

这在这里进行了更详细的介绍:如何将Perl对象转换为JSON,反之亦然

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何为大量文档的大量时间值对组织mongodb数据库?

来自分类Dev

您如何组织文件下载?

来自分类Dev

高效读取大量数据

来自分类Dev

如何通过读取CSV文件来保留大量数据

来自分类Dev

如何将大量数据作为惰性数组读取

来自分类Dev

您如何读取此.wav文件字节数据?

来自分类Dev

如何组织这些数据?

来自分类Dev

MongoDB:如何组织数据

来自分类Dev

读取API返回的大量数据

来自分类Dev

您如何组织Java bean属性名称?

来自分类Dev

您如何组织Java bean属性名称?

来自分类Dev

如果您一次读取大量数据,则在处理文件时使用缓冲流有什么好处吗?

来自分类Dev

在Ruby中,如何组织大量数据以进行最有效的正则表达式搜索?

来自分类Dev

Golang从管道中读取大量数据

来自分类Dev

从csv读取行中存储的大量数据

来自分类Dev

直接从文件中读取大量bmp数据

来自分类Dev

从csv读取行中存储的大量数据

来自分类Dev

您如何组织多个项目使用的ant macrodef?

来自分类Dev

您如何使用Pydev在Eclipse中组织导入?

来自分类Dev

您如何组织Bing Cogntivie Services API新闻请求?

来自分类Dev

如何删除权限警告“读取和更改您访问的网站上的所有数据”?

来自分类Dev

如何从Foxpro删除大量数据

来自分类Dev

LibGDX:如何保存大量数据?

来自分类Dev

从具有大量数据包的 NetworkStream 异步读取数据

来自分类Dev

在收到大量输入后,您如何应对emacs暂停?

来自分类Dev

您如何在Roblox中使用脚本锚定大量小组?

来自分类Dev

如何将C数据结构转换为C#结构,以允许您从文件中读取数据类型?

来自分类Dev

如何在Julia中组织复杂的数据

来自分类Dev

Excel 如何组织重复数据

Related 相关文章

热门标签

归档