-
Count duplicate array entries?
Say i have an array:
Code:
var my_array:Array = new Array("blah", "blah", "blah2" , "blah3", "blah2", "blah", "blah3", "blah4")
How would i count the duplicates and return the amount?
For instance, something like:
countArray(my_array, "blah") or my_array.countArray("blah")
to return the number "3"
-
PHP Code:
var my_array:Array = new Array("blah", "blah", "blah2", "blah3", "blah2", "blah", "blah3", "blah4");
function count_duplicate(data_arr:Array, str:String) { Array.prototype.copy = Array.prototype.slice; var arr = data_arr.copy(); var i = 0; var count = 0; while (i<arr.length) { var j = 0; while (j<arr.length) { if (arr[j] == str) { arr.splice(j,1); count++; } j++; } i++; } if (count>1) { return "Duplicate found: "+(count); } else if (count == 0) { return "Invalid search"; } else { return "No duplicate found"; } } Array.prototype.count_duplicate = function(str) { Array.prototype.copy = Array.prototype.slice; var arr = this.copy(); var i = 0; var count = 0; while (i<arr.length) { var j = 0; while (j<arr.length) { if (arr[j] == str) { arr.splice(j,1); count++; } j++; } i++; } if (count>1) { return "Duplicate found: "+(count); } else if (count == 0) { return "Invalid search"; } else { return "No duplicate found"; } };
var count; trace("my_array.count_duplicate(\"blah\");\n"); count = my_array.count_duplicate("blah"); trace(count); count = my_array.count_duplicate("blah4"); trace(count); count = my_array.count_duplicate("bla"); trace(count); trace("\ncount_duplicates(my_array, \"blah\");\n"); count = count_duplicate(my_array, "blah"); trace(count); count = count_duplicate(my_array, "blah4"); trace(count); count = count_duplicate(my_array, "bla"); trace(count);
You can adopt which ever style you want.
marlopax
Last edited by marlopax; 12-08-2012 at 01:47 PM.
-
-
Originally Posted by Holsey
Thanks so much!
Actually it's having trouble counting. My array clearly has 9 of the same string entry, but it's returning 7. Now i have 6, and it's returning 5...
-
.
Hi,
I didn't write it but maybe this is for you
PHP Code:
Array.prototype.countValues = function()
{
var z, x = this.length, c = false, a = [], d = [];
while (x--)
{
z = 0;
while (z < x)
{
if (this[x] == this[z])
{
c = true;
d.push(this[x]);
break;
}
z++;
}
if (!c)
{
a.push([this[x], 1]);
}
else
{
c = false;
}
}
y = a.length;
while (y--)
{
q = 0;
while (q < d.length)
{
if (a[y][0] == d[q])
{
a[y][1]++;
}
q++;
}
}
return a;
};
var my_array:Array = new Array("blah", "blah", "blah2", "blah3", "blah2", "blah", "blah3", "blah4", "blah", "blah2", "blah3", "blah2", "blah", "blah3", "blah4");
var newArray:Array = my_array.countValues();
trace(newArray + " - Normal");
trace(newArray.reverse() + " - Reversed");
outputs
blah4,2,blah3,4,blah2,4,blah,5 - Normal
blah,5,blah2,4,blah3,4,blah4,2 - Reversed
-
PHP Code:
var my_array:Array = new Array("a","c","b","n","b","v","b","b","d","a","s","c","a","b","b","a","s","a","b","c","b","a","b","a");
function count_by_search(data_arr:Array, str:String) {
Array.prototype.copy = Array.prototype.slice;
var arr = data_arr.copy();
var i = 0;
var count = 0;
while (i<arr.length) {
var j = 0;
while (j<arr.length) {
if (arr[j] == str) {
arr.splice(j,1);
count++;
}
j++;
}
i++;
}
if (count>0) {
return "Duplicate found "+str+": "+(count);
} else if (count == 0) {
return "Invalid search";
} else {
return "No duplicate found";
}
}
Array.prototype.count_by_search = function(str) {
Array.prototype.copy = Array.prototype.slice;
var arr = this.copy();
var i = 0;
var count = 0;
while (i<arr.length) {
var j = 0;
while (j<arr.length) {
if (arr[j] == str) {
arr.splice(j,1);
count++;
}
j++;
}
i++;
}
if (count>0) {
return "Duplicate found "+str+": "+(count);
} else if (count == 0) {
return "Invalid search";
} else {
return "No duplicate found";
}
};
var count;
trace("my_array.count_by_search(\"blah\");\n");
count = my_array.count_by_search("v");
trace(count);
count = my_array.count_by_search("a");
trace(count);
count = my_array.count_by_search("l");
trace(count);
trace("\ncount_by_search(my_array, \"blah\");\n");
count = count_by_search(my_array, "a");
trace(count);
count = count_by_search(my_array, "b");
trace(count);
count = count_by_search(my_array, "l");
trace(count);
Instead doing copy/paste of my code, i suggest you to go through it to understand what the code is doing.
I hope you are going to search the number of similar entries and not the duplicate. Resulting duplicate 1 means you have two similar entries. No duplicate means you have only one entry and Invalid data means no such entries found.
marlopax
-
Originally Posted by marlopax
PHP Code:
var my_array:Array = new Array("a","c","b","n","b","v","b","b","d","a","s","c","a","b","b","a","s","a","b","c","b","a","b","a");
function count_by_search(data_arr:Array, str:String) {
Array.prototype.copy = Array.prototype.slice;
var arr = data_arr.copy();
var i = 0;
var count = 0;
while (i<arr.length) {
var j = 0;
while (j<arr.length) {
if (arr[j] == str) {
arr.splice(j,1);
count++;
}
j++;
}
i++;
}
if (count>0) {
return "Duplicate found "+str+": "+(count);
} else if (count == 0) {
return "Invalid search";
} else {
return "No duplicate found";
}
}
Array.prototype.count_by_search = function(str) {
Array.prototype.copy = Array.prototype.slice;
var arr = this.copy();
var i = 0;
var count = 0;
while (i<arr.length) {
var j = 0;
while (j<arr.length) {
if (arr[j] == str) {
arr.splice(j,1);
count++;
}
j++;
}
i++;
}
if (count>0) {
return "Duplicate found "+str+": "+(count);
} else if (count == 0) {
return "Invalid search";
} else {
return "No duplicate found";
}
};
var count;
trace("my_array.count_by_search(\"blah\");\n");
count = my_array.count_by_search("v");
trace(count);
count = my_array.count_by_search("a");
trace(count);
count = my_array.count_by_search("l");
trace(count);
trace("\ncount_by_search(my_array, \"blah\");\n");
count = count_by_search(my_array, "a");
trace(count);
count = count_by_search(my_array, "b");
trace(count);
count = count_by_search(my_array, "l");
trace(count);
Instead doing copy/paste of my code, i suggest you to go through it to understand what the code is doing.
I hope you are going to search the number of similar entries and not the duplicate. Resulting duplicate 1 means you have two similar entries. No duplicate means you have only one entry and Invalid data means no such entries found.
marlopax
But i do understand what the code is doing.. Don't assume things.
If the array is:
var my_array:Array = new Array("a","a","a","a","a","a","a","a","a");
Your code returns 7. Not 9.
var my_array:Array = new Array("a","b","a","a","a","a","a","a","a");
This also returns 7 As. Including the 1 B.
var my_array:Array = new Array("a","b","a","a","a","a","a","a","a","b");
This returns 8 As and 2 Bs. Which is correct.
var my_array:Array = new Array("a","a","a","a","a","a","a","a","v","a","a", "a","a","a","a","a");
This returns 14 As and 1 V. There are 15 As here.
var my_array:Array = new Array("a","a","a","b","a","a","a","a","a","v","a", "a","a","a","a","a","a");
This returns 15 As, 1 V and 1 B. Still, 15 As.
I don't see a problem in the code so i don't understand what is causing this.
-
Actually, this small change fixes it:
Code:
if(arr[j] == str) {
arr.splice(j,1);
count++;
}
to
Code:
while(arr[j] == str) {
arr.splice(j,1);
count++;
}
Thank you marlopax!
-
PHP Code:
var my_array:Array = new Array("a", "a", "a", "b", "a", "a", "a", "a", "a", "v", "a", "a", "a", "a", "a", "a", "a");
function count_by_search(data_arr:Array, str:String) {
Array.prototype.copy = Array.prototype.slice;
var arr = data_arr.copy();
var i = 0;
var count = 0;
while (i<arr.length) {
var j = 0;
while (j<arr.length) {
if (arr[j] == str) {
arr.splice(j,1);
count++;
} else {
j++;
}
}
i++;
}
if (count>0) {
return "Duplicate found "+str+": "+(count);
} else if (count == 0) {
return "Invalid search";
} else {
return "No duplicate found";
}
}
Array.prototype.count_by_search = function(str) {
Array.prototype.copy = Array.prototype.slice;
var arr = this.copy();
var i = 0;
var count = 0;
while (i<arr.length) {
var j = 0;
while (j<arr.length) {
if (arr[j] == str) {
arr.splice(j,1);
count++;
} else {
j++;
}
}
i++;
}
if (count>0) {
return "Duplicate found "+str+": "+(count);
} else if (count == 0) {
return "Invalid search";
} else {
return "No duplicate found";
}
};
var count_search;
trace("my_array.count_by_search(\"string\");\n");
count_search = my_array.count_by_search("b");
trace(count_search);
count_search = my_array.count_by_search("a");
trace(count_search);
count_search = my_array.count_by_search("l");
trace(count_search);
trace("\ncount_by_search(my_array, \"string\");\n");
count_search = count_by_search(my_array, "a");
trace(count_search);
count_search = count_by_search(my_array, "b");
trace(count_search);
count_search = count_by_search(my_array, "l");
trace(count_search);
That is not the correct way. This will be the right way.
Sorry for my mistake..
marlopax
-
Originally Posted by marlopax
PHP Code:
var my_array:Array = new Array("a", "a", "a", "b", "a", "a", "a", "a", "a", "v", "a", "a", "a", "a", "a", "a", "a");
function count_by_search(data_arr:Array, str:String) {
Array.prototype.copy = Array.prototype.slice;
var arr = data_arr.copy();
var i = 0;
var count = 0;
while (i<arr.length) {
var j = 0;
while (j<arr.length) {
if (arr[j] == str) {
arr.splice(j,1);
count++;
} else {
j++;
}
}
i++;
}
if (count>0) {
return "Duplicate found "+str+": "+(count);
} else if (count == 0) {
return "Invalid search";
} else {
return "No duplicate found";
}
}
Array.prototype.count_by_search = function(str) {
Array.prototype.copy = Array.prototype.slice;
var arr = this.copy();
var i = 0;
var count = 0;
while (i<arr.length) {
var j = 0;
while (j<arr.length) {
if (arr[j] == str) {
arr.splice(j,1);
count++;
} else {
j++;
}
}
i++;
}
if (count>0) {
return "Duplicate found "+str+": "+(count);
} else if (count == 0) {
return "Invalid search";
} else {
return "No duplicate found";
}
};
var count_search;
trace("my_array.count_by_search(\"string\");\n");
count_search = my_array.count_by_search("b");
trace(count_search);
count_search = my_array.count_by_search("a");
trace(count_search);
count_search = my_array.count_by_search("l");
trace(count_search);
trace("\ncount_by_search(my_array, \"string\");\n");
count_search = count_by_search(my_array, "a");
trace(count_search);
count_search = count_by_search(my_array, "b");
trace(count_search);
count_search = count_by_search(my_array, "l");
trace(count_search);
That is not the correct way. This will be the right way.
Sorry for my mistake..
marlopax
Ah, that works as well. No worries, thank you again!
Posting Permissions
- You may not post new threads
- You may not post replies
- You may not post attachments
- You may not edit your posts
-
Forum Rules
|
Click Here to Expand Forum to Full Width
|