Arrays 在AS3数组中查找序列
有人知道如何找到数组中的序列数吗 例如,我的数组是:Arrays 在AS3数组中查找序列,arrays,actionscript-3,apache-flex,Arrays,Actionscript 3,Apache Flex,有人知道如何找到数组中的序列数吗 例如,我的数组是: var numbers:Array = new Array(banana, banana, apple, banana, banana); 我需要找到的是: *“香蕉”的序列有多少次 *以及每个序列的长度 为了得到以下结果,我要做什么: 2,1,2(2个香蕉,1个苹果,2个香蕉) 我试过做while循环,但我想我错过了什么 一个简短的例子将非常感谢 thanxvar-prev:String=null; var q:int=0; 变量结果:数
var numbers:Array = new Array(banana, banana, apple, banana, banana);
我需要找到的是:
*“香蕉”的序列有多少次
*以及每个序列的长度
为了得到以下结果,我要做什么:
2,1,2(2个香蕉,1个苹果,2个香蕉)
我试过做while循环,但我想我错过了什么
一个简短的例子将非常感谢
thanxvar-prev:String=null;
var q:int=0;
变量结果:数组=新数组();
对于(var i:int=0;i0)结果,推送(q);
q=1;
prev=数字[i];
}
else++q;
}
如果(q>0)结果,推送(q);
也就是说,假设香蕉等是字符串(可能是上面的输入错误?)。修改为其他类型的对象很简单实际上,您只想知道索引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(','));
var targetIndex:int=numbers.length-1;
var结果:数组=[1];
var resultsIndex:int=0;
对于(变量n:int=0;n
在您没有定义香蕉和苹果的问题中,无论如何,我会使用映射
或字典
来存储键/值对,键是要计数的字符串/对象,值是数组中对象出现的计数器
var objectsCounter:Dictionary = new Dictionary();
for (var key:String in numbers)
{
if ( objectsCounter[key] )
objectsCounter[key] = objectsCounter[key] + 1;
else
objectsCounter[key] = 1;
}
这样,您可以在字典中存储任何类型
编辑:
我相信这就是你想要的:
var array:Array = [
"banana", "banana",
"apple",
"banana", "banana", "banana"
];
var sequences:Array = findSequences(array, "banana");
trace("sequences:", sequences); // prints "sequences: 2,3"
以及:
香蕉和苹果是什么对象?它们显然不是字符串。请共享您尝试的代码。也作为参考;您可以使用问题编辑器中的花括号按钮格式化代码。这会让你的问题,尤其是代码,更容易阅读。嘿,你说得对。我的问题不够清楚。这里有一些解释:香蕉和苹果是弦。我只想找到香蕉的序列:例如,对于这个数组:var numbers:array=new数组(banana,banana,apple,banana,banana);我想得到“2,2”。再次感谢您的帮助!嘿,太多了!我的问题不够清楚。我想知道——如果我只想返回香蕉的序列——我该怎么办?如果((q>0)和((prev==“香蕉”))应该这样做。
var banana:int = 1;
var apple:int = 2;
sequencesInArray([banana, banana, apple, banana, banana]); //returns: [2, 1, 2]
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
}
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;
}