LiLin Sairefu Oteru
LiLin Sairefu Oteru

Reputation: 11

count duplicate int in C#

I want it to be (eg: "2" is occurs 10 time(s)). Can anyone help?

var q = from x in wordlist
        group x by x into g
        let count = g.Count()
        orderby count descending
        select new { Word = g.Key, Count = count };


string keyword = "";

foreach (var x in q)
{            
    List<int> wordcount = new List<int>() { x.Count };
    foreach (int value in wordcount.Distinct())
    {
        System.Diagnostics.Debug.WriteLine("\"{0}\" occurs {1} time(s).", value, wordcount.Count(v => v == value));
    }
}

Output:

"2" occurs 1 time(s).
"2" occurs 1 time(s).
"2" occurs 1 time(s).
"2" occurs 1 time(s).
"2" occurs 1 time(s).
"2" occurs 1 time(s).
"2" occurs 1 time(s).
"2" occurs 1 time(s).
"2" occurs 1 time(s).
"2" occurs 1 time(s).
"1" occurs 1 time(s).
"1" occurs 1 time(s).
"1" occurs 1 time(s).
"1" occurs 1 time(s).
"1" occurs 1 time(s).
"1" occurs 1 time(s).
"1" occurs 1 time(s).
"1" occurs 1 time(s).
"1" occurs 1 time(s).
"1" occurs 1 time(s).
"1" occurs 1 time(s).
"1" occurs 1 time(s).
"1" occurs 1 time(s).
"1" occurs 1 time(s).
"1" occurs 1 time(s).
"1" occurs 1 time(s).
"1" occurs 1 time(s).
"1" occurs 1 time(s).
"1" occurs 1 time(s).
"1" occurs 1 time(s).
"1" occurs 1 time(s).
"1" occurs 1 time(s).
"1" occurs 1 time(s).
"1" occurs 1 time(s).
"1" occurs 1 time(s).
"1" occurs 1 time(s).
"1" occurs 1 time(s).
"1" occurs 1 time(s).
"1" occurs 1 time(s).
"1" occurs 1 time(s).
"1" occurs 1 time(s).
"1" occurs 1 time(s).
"1" occurs 1 time(s).
"1" occurs 1 time(s).
"1" occurs 1 time(s).
"1" occurs 1 time(s).
"1" occurs 1 time(s).
"1" occurs 1 time(s).
"1" occurs 1 time(s).
"1" occurs 1 time(s).
"1" occurs 1 time(s).
"1" occurs 1 time(s).

Upvotes: 0

Views: 93

Answers (2)

Richard Mathis
Richard Mathis

Reputation: 23

I wasn't totally clear on what you were requesting, I answered your "Count Duplicate int in C-Sharp" statement more so than your example.

Is this what you're looking for? There is a boolean for you to change it to show only duplicates (meaning there is more than 1 of a given number in the list) by leaving showAllNumbers as false or setting it to true, because I wasn't sure exactly what you were trying to do.

using System;
using System.Collections.Generic;
using System.Linq;

public class Program
{
    public static void Main()
    {

        List<int> numberCount = new List<int>(){52, 52, 15, 32, 52, 7, 9};
        bool showAllNumbers = true;
        var query = (from x in numberCount.GroupBy(intGroup => intGroup).Select(intGroupInfo => new {intLabel = intGroupInfo.Key, Count = intGroupInfo.Count()}) where (x.Count > 1 || showAllNumbers) select x);

        foreach(var groupCount in query)
        {
            Console.WriteLine(String.Format("\"{0}\" occurs {1} times", groupCount.intLabel, groupCount.Count));
        }


    }
}

This results in something like this "52" occurs 3 times "15" occurs 1 times "32" occurs 1 times "7" occurs 1 times "9" occurs 1 times

Upvotes: 0

Daniel Hilgarth
Daniel Hilgarth

Reputation: 174369

You already have all the info in q. You should be able to simply print it:

foreach (var x in q)
{
    System.Diagnostics.Debug.WriteLine("\"{0}\" occurs {1} time(s).", x.Word, x.Count);
}

Upvotes: 2

Related Questions