Jump to content

Recommended Posts

Posted

Hello,

 

having issue to count duplicates in array, tried _ArrayFindAll but it doesn't find by word? _ArrayUnique only shows the words without value how many duplicates.

 

for example I have 

; Extracted array from excel which looks like something like this:

#include <Array.au3>

Local $aArray[0]

$aArray = [John, Martin, Potter, John, Marta, Lola, John]

How I can count John how many time he was duplicated, I need in return only value which is 3?

 

Tried

$name = "John"

$findDup = _ArrayFindAll($aArray, $name, 0, 0, 0)

MsgBox(0, "", $findDup)

but doesnt work :{

  • Moderators
Posted

diff,

If you declare the array correctly and read the Help file to see that _ArrayFindAll returns an array which does not display in a MsgBox, you get this:

#include <Array.au3>

Local $aArray = ["John", "Martin", "Potter", "John", "Marta", "Lola", "John"]

$sName = "John"

$aFindDup = _ArrayFindAll($aArray, $sName)

_ArrayDisplay($aFindDup, "", Default, 8)

MsgBox(0, "", UBound($aFindDup))

which works fine for me.

M23

Public_Domain.png.2d871819fcb9957cf44f4514551a2935.png Any of my own code posted anywhere on the forum is available for use by others without any restriction of any kind

Open spoiler to see my UDFs:

  Reveal hidden contents

 

Posted

Here an example also with "partial search" :

#include <Array.au3>
Local $sSearch, $aResult
Local $aArray = ["Peter John Doe", "Martin", "Potter", "John", "Marta", "Lola", "John"]
_ArrayDisplay($aArray, "SearchArray") ; *** just to display the array

$sSearch = "John"

; Parameter $iCompare = 1 ==> executes a partial search
; ---------------------------------------------------------------V-----------
$aResult = _ArrayFindAll($aArray, $sSearch, Default, Default, 0, 1, 0, False)
_ArrayDisplay($aResult, "$iCompare = 1") ; *** just to display the array
MsgBox(BitOR(4096,96), "Result 1 :", $sSearch & "  was found " & UBound($aResult) & " time(s)" & @CRLF)

; Parameter $iCompare = 2 ==> comparison match same type and same value
; ---------------------------------------------------------------V-----------
$aResult = _ArrayFindAll($aArray, $sSearch, Default, Default, 0, 2, 0, False)
_ArrayDisplay($aResult, "$iCompare = 2") ; *** just to display the array
MsgBox(BitOR(4096,96), "Result 2 :", $sSearch & "  was found " & UBound($aResult) & " time(s)" & @CRLF)

 

Musashi-C64.png

"In the beginning the Universe was created. This has made a lot of people very angry and been widely regarded as a bad move."

Posted
  On 5/28/2020 at 8:05 AM, Melba23 said:

diff,

If you declare the array correctly and read the Help file to see that _ArrayFindAll returns an array which does not display in a MsgBox, you get this:

#include <Array.au3>

Local $aArray = ["John", "Martin", "Potter", "John", "Marta", "Lola", "John"]

$sName = "John"

$aFindDup = _ArrayFindAll($aArray, $sName)

_ArrayDisplay($aFindDup, "", Default, 8)

MsgBox(0, "", UBound($aFindDup))

which works fine for me.

M23

Expand  

I don't know why but in my situation only works with partial search included in _ArrayFindAll with your code.

 

Thank you guys, modified from both codes and got it working by adding partial search.

 

  On 5/28/2020 at 8:22 AM, Musashi said:

Here an example also with "partial search" :

#include <Array.au3>
Local $sSearch, $aResult
Local $aArray = ["Peter John Doe", "Martin", "Potter", "John", "Marta", "Lola", "John"]
_ArrayDisplay($aArray, "SearchArray") ; *** just to display the array

$sSearch = "John"

; Parameter $iCompare = 1 ==> executes a partial search
; ---------------------------------------------------------------V-----------
$aResult = _ArrayFindAll($aArray, $sSearch, Default, Default, 0, 1, 0, False)
_ArrayDisplay($aResult, "$iCompare = 1") ; *** just to display the array
MsgBox(BitOR(4096,96), "Result 1 :", $sSearch & "  was found " & UBound($aResult) & " time(s)" & @CRLF)

; Parameter $iCompare = 2 ==> comparison match same type and same value
; ---------------------------------------------------------------V-----------
$aResult = _ArrayFindAll($aArray, $sSearch, Default, Default, 0, 2, 0, False)
_ArrayDisplay($aResult, "$iCompare = 2") ; *** just to display the array
MsgBox(BitOR(4096,96), "Result 2 :", $sSearch & "  was found " & UBound($aResult) & " time(s)" & @CRLF)

 

Expand  

 

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...