沒有人知道如何處理數組中的序列數量嗎?在AS3陣列中查找序列
例如,我的數組是:
var numbers:Array = new Array(banana, banana, apple, banana, banana);
,我需要找到的是: *多少次有「香蕉」 *的序列,並且每個序列的長度。
我爲了得到以下結果做什麼shell: 2,1,2(2個香蕉,蘋果1個,2個香蕉)
我試圖做的,而循環,但我我想我錯過了什麼。
一個簡短的例子將非常感激!
感謝名單
沒有人知道如何處理數組中的序列數量嗎?在AS3陣列中查找序列
例如,我的數組是:
var numbers:Array = new Array(banana, banana, apple, banana, banana);
,我需要找到的是: *多少次有「香蕉」 *的序列,並且每個序列的長度。
我爲了得到以下結果做什麼shell: 2,1,2(2個香蕉,蘋果1個,2個香蕉)
我試圖做的,而循環,但我我想我錯過了什麼。
一個簡短的例子將非常感激!
感謝名單
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);
這是,假設香蕉等都是字符串(可能是一個以上錯字?)。這將是簡單的修改到其他類型的對象
嘿,thanx很多!我的問題還不夠清楚。 我想知道 - 萬一我想只返回香蕉的序列 - 我該怎麼辦?再次感謝。 – user1238290 2012-02-28 17:25:29
if((q> 0)&&(prev ==「bananas」))應該做的。 – Eduardo 2012-02-28 17:27:58
作品令人驚歎!非常感謝!!! – user1238290 2012-02-28 17:38:39
的真正所有你想知道的是,在指數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(','));
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]
在這個問題你不定義banana
和apple
,反正我會用一個map
或Dictionary
存儲鍵/值對,關鍵是你想要計算的字符串/對象,值是數組中出現的對象的計數器。
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;
}
什麼對象是'banana'和'apple'?他們顯然不是字符串。 – vulkanino 2012-02-28 16:20:07
請分享您嘗試的代碼。也作爲參考;您可以使用問題編輯器中的大括號按鈕格式化代碼。它會讓你的問題,特別是代碼更易於閱讀。 – JeffryHouser 2012-02-28 16:20:15
嘿,你說得對。我的問題還不夠清楚。這裏有一些解釋:香蕉和蘋果是串。我想找到的只是香蕉的序列:例如 - 對於這個數組: var numbers:Array = new Array(香蕉,香蕉,蘋果,香蕉,香蕉); 我想獲得「2,2」。 thanx再次尋求幫助! – user1238290 2012-02-28 17:29:48