【问题标题】:finding sequences in AS3 array在 AS3 数组中查找序列
【发布时间】:2012-02-28 16:17:35
【问题描述】:

有没有人知道如何才能找到数组中的序列数?

例如,我的数组是:

var numbers:Array = new Array(banana, banana, apple, banana, banana);

我需要找到的是: * 有多少次“香蕉”的序列 * 以及每个序列的长度。

为了得到以下结果我做了什么外壳: 2,1,2(2个香蕉,1个苹果,2个香蕉)

我尝试使用 do while 循环,但我想我错过了一些东西。

一个简短的例子将不胜感激!

感谢

【问题讨论】:

  • bananaapple 是什么对象?它们显然不是字符串。
  • 请分享您尝试过的代码。也作为仅供参考;您可以使用问题编辑器中的大括号按钮格式化代码。它会让你的问题,尤其是代码,更容易阅读。
  • 嘿,你说得对。我的问题不够清楚。这里有一些解释:香蕉和苹果是字符串。我希望找到的只是香蕉的序列:例如 - 对于这个数组: var numbers:Array = new Array(banana,banana,apple,banana,banana);我想得到 "2,2" 。再次感谢您的帮助!

标签: arrays actionscript-3 apache-flex


【解决方案1】:
var prev:String = null;
var q:int = 0;
var result:Array = new Array();
for(var i:int=0; i<numbers.length; ++i){
  if(prev!=numbers[i]){
    if(q>0) result.push(q);
    q=1;
    prev=numbers[i];
  }
  else ++q;
}
if(q>0) result.push(q);

这是,假设香蕉等是字符串(可能是上面的错字?)。修改为其他类型的对象会很简单

【讨论】:

  • 嘿,非常感谢!我的问题不够清楚。我想知道 - 如果我只想返回香蕉的序列 - 我该怎么办?再次感谢。
  • if((q>0)&&(prev=="bananas")) 应该这样做。
【解决方案2】:

其实你只想知道索引 n 处的字符串是否等于索引 n+1 处的字符串...

var targetIndex:int = numbers.length - 1;
var results:Array = [1];
var resultsIndex:int = 0;
for(var n:int = 0; n < targetIndex; n++) {
    if(numbers[n] == numbers[n+1]) {
        results[resultsIndex]++;
    } else {
        results[++resultsIndex] = 1;
    }
}
trace(results.join(','));

【讨论】:

    【解决方案3】:
    function sequencesInArray(array:Array):Array {
        var sequence:Array = [];
        var currSequenceCount:uint = 1;
        for (var i:uint = 1; i < numbers.length; i++) {
            if (numbers[i - 1] != numbers[i]) {
                sequence.push(currSequenceCount);
                currSequenceCount = 1;
            } else {
                currSequenceCount++;
            }
        }
        return sequence;
    }
    

    然后:

    var banana:int = 1;
    var apple:int = 2;
    sequencesInArray([banana, banana, apple, banana, banana]); //returns: [2, 1, 2]
    

    【讨论】:

      【解决方案4】:

      在你没有定义bananaapple的问题中,无论如何我会使用mapDictionary来存储键/值对,键是你想要的字符串/对象count 和值是数组中对象出现的计数器。

      var objectsCounter:Dictionary = new Dictionary();
      
      for (var key:String in numbers) 
      {
          if ( objectsCounter[key] )
              objectsCounter[key] = objectsCounter[key] + 1;
          else 
              objectsCounter[key] = 1;
      }
      

      这样你可以在字典中存储任何类型。

      编辑:

      for (var key:String in objectsCounter) 
      {
          // iterates through each object key
      }
      
      for each (var value:Number in objectsCounter) 
      {
          // iterates through each value
      }
      

      【讨论】:

        【解决方案5】:

        我相信这就是您要找的:

            var array:Array = [
                "banana", "banana",
                "apple",
                "banana", "banana", "banana"
            ];
        
            var sequences:Array = findSequences(array, "banana");
        
            trace("sequences:", sequences); // prints "sequences: 2,3"
        

        还有:

        private function findSequences(array:Array, searchElement:*):Array
        {
            var sequences:Array = [];
            var currentSequence:int = 0;
        
            for each (var element:* in array) {
                if (element == searchElement) {
                    currentSequence++;
        
                } else if (currentSequence > 0) {
                    sequences.push(currentSequence);
                    currentSequence = 0;
                }
            }
        
            if (currentSequence > 0) {
                sequences.push(currentSequence);
            }
        
            return sequences;
        }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2014-02-14
          • 2023-04-09
          • 2014-02-18
          • 1970-01-01
          • 1970-01-01
          • 2011-11-11
          • 2016-11-26
          相关资源
          最近更新 更多