首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >随机选择对象属性

随机选择对象属性
EN

Stack Overflow用户
提问于 2013-04-19 06:12:11
回答 1查看 434关注 0票数 0

我想退一步是合适的。我最初的问题是在这篇文章的底部,以供参考。

我正在写一个猜字游戏,想要一种方法: 1.给定一个字长2-10个字符,随机生成一个有效的英文单词来猜测。2.给定一个2-10个字符的猜测,确保它是一个有效的英语单词。我创建了一个由9个对象组成的向量,每个字长一个,并使用单词列表中的单词来命名属性并将其值设置为true,动态地创建了172000个属性/值对。内环是:

代码语言:javascript
复制
for (i = 0; i < _WordCount[wordLength] - 2; i) 
{
    _WordsList[wordLength]["" + _WordsVector[wordLength][i++]] = true;
}

若要验证一个单词,以下查找将返回true (如果有效):

代码语言:javascript
复制
function Validate(key:String):Boolean
{
    return  _WordsList[key.length - 2][key]
}

我将它们从向量转移到对象,以利用散列查找属性。还没有看过这一切需要多少记忆,但这是一个有用的学习练习。我只是不知道如何最好地从其中一个对象中随机选择一个属性。我想通过生成1000个单词并分析分布的统计数据来验证我所选择的任何方法。所以,我想我的问题首先应该是,我是否更好地使用其他方法,如将列表保持在向量中,每次都进行搜索?

原始问题

新手第一个问题:

我读了一篇文章说遍历顺序是for..。in由哈希表确定,并显示为随机的。

我正在寻找一种在对象中随机选择属性的好方法。一个for中的第一个元素。在遍历属性时,或者迭代中的随机n元素可能是真正的随机元素。我希望确保访问给定属性的概率大致相等。这些对象具有大约100到20000个属性。其他方法?

谢谢。

EN

回答 1

Stack Overflow用户

发布于 2013-04-20 18:46:53

看看您在编辑的问题中描述的场景,我建议使用Vector.<String>和map对象。

您可以将所有键存储在向量中,并将它们映射到对象中,然后可以在向量中选择一个随机数字键,并将结果作为映射对象中的键使用。

为了说明这一点,请看一下这个简单的例子:

代码语言:javascript
复制
var keys:Vector.<String> = new Vector.<String>();
var map:Object = { };

function add(key:String, value:*):void
{
    keys.push(key);
    map[key] = value;
}

function getRandom():*
{
    var randomKey = keys[int(Math.random() * keys.length)];

    return map[randomKey];
}

你可以这样用它:

代码语言:javascript
复制
add("a", "x");
add("b", "y");
add("c", "z");

var radomValue:* = getRandom();

使用Object 代替 String

不必存储字符串,您可以存储在其中包含字符串的对象,如下所示:

代码语言:javascript
复制
public class Word
{
    public var value:String;
    public var length:int;

    public function Word(value:String)
    {
        this.value = value;
        this.length = value.length;
    }
}

使用此对象作为值而不是字符串,但需要将映射对象更改为字典

代码语言:javascript
复制
var map:Dictionary = new Dictionary();

function add(key:Word, value:*):void
{
    keys.push(key);
    map[key] = value;
}

这样,您就不会重复每个单词(但是会有少量的类开销)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16098354

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档