Need to get the repeated value in an array how many times it got repeated and the first index where the repeated value is

I have an array of 10 elements in which some elements are repeated . Need to get the repeated values and how many times it is repeated and the first index of the repeated value.

Array of 10 elements 01234231567

Can any one pls help me with SV code.

A brute force solution that I can think of is this -

class packet;
  
  
  
  int count[11];
  int first_index[11]; 
  
  function void count_and_index(int a[], output int count[11], output int first_index[11]); 
    
    for(int i=0; i < a.size(); i++) begin 
      for(int j=i+1; j< a.size(); j++) begin 
        if(  a[i] == a[j]) begin 
          $display("value of a[i] and a[j] are %d, and %d and i and j are %d, %d", a[i], a[j], i, j); 
          count[a[i]] = count[a[i]] + 1; 
          if(count[a[i]] == 1) first_index[a[i]] = j; 
          
        end 
        
      end 
    end 
    
    
  endfunction 
  
  


endclass 


module tb; 
  initial begin 
    int a[11] = '{0,1,2,3,4,2,3,1,5,6,7}; 
    int final_count[11], final_first_index[11]; 
    packet p = new(); 
    p.count_and_index(a, final_count, final_first_index); 
    $display("final_count = %p", final_count);
    $display("final_first_index = %p", final_first_index);
   
   
    
  end 
  
endmodule

HI Raghav,

I am not getting what is the significance of count[11], first_index[11] of the function used for …
Are they checking how many times they are repeated and the index’s ?

Thanks & Regards,
Manikanta K.

Please explain how that value represents an array of 10 elements.

Hi @dave_59 ,

My intention is dynamic array with entries as like this {0,1,2,3,4,2,3,1,5,6}

Thanks & Regards,
Manikanta K.

It would help to get all that information upfront along with how you want the results reported.

Here’s an example piece of code that gives you the information you requested, but probably not in the format you wanted it to because we don’t know what that is.

module tb; 
  int a[], repeats[];
  int count[int] = '{default:0};
  int firsts[int][$];
  initial begin 
    a = {0,1,2,3,4,2,3,1,5,6, 7, 7};
    foreach (a[i]) count[a[i]]++; // gets counts of all array values
    repeats = count.find_index() with (item>1);  // gets all counts >1
    foreach(repeats[i])
      firsts[repeats[i]] = a.find_first_index() with (item == repeats[i]);
    $display("%p",repeats);
    $display("%p",firsts);
  end 
endmodule
2 Likes