【问题标题】:How to get a random element from an object in AS3?如何从 AS3 中的对象中获取随机元素?
【发布时间】:2013-09-17 08:22:04
【问题描述】:

你可以从下面的数组中获取随机元素

var list:Array=[1,2,3,4,5];
var randomElement:int = list[ int(Math.random()*list.length) ] ;

但是如何从对象中获取随机元素呢?

var list:Object={a:0,b:1,c:1};
var randomElement:int = //from the list..how??

谢谢

【问题讨论】:

    标签: arrays actionscript-3 object random element


    【解决方案1】:

    您可以创建临时键数组,例如:

        var list:Object={a:0,b:1,c:2};
        var keys:Array = [];
        for(var key:String in list)
            keys[keys.length] = key;
    
        var randomElement:int = list[keys[ int(Math.random()*keys.length) ]];
    

    每次你需要一个对象的随机属性时创建一个新数组是相当昂贵的,但我没有看到其他选项来获得它。

    【讨论】:

      【解决方案2】:

      另一种选择(针对这种特殊情况):

       var list:Object={ a:0,b:1,c:2 };
       var max_i:Number = "c".charCodeAt( 0 );
       var min_i:Number = "a".charCodeAt( 0 );
       var range:Number = max_i - min_i ;
       var rand_i:Number = Math.floor( Math.random() * ( range + 1 ) );
      
       var prop:String = String.fromCharCode( min_i + rand_i );
       var randomElement:int = list[ prop ];
      
       trace( prop , randomElement );
      

      【讨论】:

        【解决方案3】:

        这种方法怎么样?

        var list:Object = {a:0,b:1,c:1};
        var keyCount:int = 3; //number of keys
        var randomElement:String;
        
        var randProb:Number = 1.0 / keyCount;
        
        for (randomElement in list)
        {
            if (Math.random() < randProb)
            {
                break;
            }
            else
            {
                randProb += 1.0 / keyCount;
            }
        }
        
        trace(list[randomElement]);
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2014-09-23
          • 1970-01-01
          • 2011-10-20
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多