2012-02-28 61 views
0

没有人知道如何处理数组中的序列数量吗?在AS3阵列中查找序列

例如,我的数组是:

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

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

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

我试图做的,而循环,但我我想我错过了什么。

一个简短的例子将非常感激!

感谢名单

+1

什么对象是'banana'和'apple'?他们显然不是字符串。 – vulkanino 2012-02-28 16:20:07

+0

请分享您尝试的代码。也作为参考;您可以使用问题编辑器中的大括号按钮格式化代码。它会让你的问题,特别是代码更易于阅读。 – JeffryHouser 2012-02-28 16:20:15

+0

嘿,你说得对。我的问题还不够清楚。这里有一些解释:香蕉和苹果是串。我想找到的只是香蕉的序列:例如 - 对于这个数组: var numbers:Array = new Array(香蕉,香蕉,苹果,香蕉,香蕉); 我想获得“2,2”。 thanx再次寻求帮助! – user1238290 2012-02-28 17:29:48

回答

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); 

这是,假设香蕉等都是字符串(可能是一个以上错字?)。这将是简单的修改到其他类型的对象

+0

嘿,thanx很多!我的问题还不够清楚。 我想知道 - 万一我想只返回香蕉的序列 - 我该怎么办?再次感谢。 – user1238290 2012-02-28 17:25:29

+0

if((q> 0)&&(prev ==“bananas”))应该做的。 – Eduardo 2012-02-28 17:27:58

+0

作品令人惊叹!非常感谢!!! – user1238290 2012-02-28 17:38:39

0

的真正所有你想知道的是,在指数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(',')); 
0
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] 
0

在这个问题你不定义bananaapple,反正我会用一个mapDictionary存储键/值对,关键是你想要计算的字符串/对象,值是数组中出现的对象的计数器。

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 
} 
0

我相信这是你在找什么:

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; 
}