Home > database >  How to print the duplicates value while converting from Dictionary to List in c#
How to print the duplicates value while converting from Dictionary to List in c#

Time:08-17

I am trying to converting from dictionary to list while converting I am getting the output

I/p-

          dic.Add("Demo1",2);
          dic.Add("Demo2",1);
          dic.Add("Demo3",1);
            
          dic.Add("Demo4",2); 

O/p- Demo1 Demo2 Demo3 Demo4

But I need Demo1 and Demo4 two times because their quantity are 2. So How can I achieve that??

Below is the code

 public IList<string> DictionaryToList(IDictionary<string,int> dictionary)

        {
            
            IDictionary<string, int> dic = new Dictionary<string, int>();
            IList<string> lst = new List<string>();
            
            dic.Add("Demo1",2);
            dic.Add("Demo2",1);
            dic.Add("Demo3",1);
            
            dic.Add("Demo4",2); 

           
            foreach (var item in dic)
            {
                if (!lst.Contains(item.Key))
                {

                    lst.Add(item.Key);
                   
                   
                }

                
            }
            
            return lst;

        }
    }
    class Program
    {
        static void Main(string[] args)
        {
            var conversion = new Conversion();
            var list = new List<string> { "Demo1","Demo2","Demo3","Demo4","Demo1","Demo4"};
            var dictionary = conversion.ListToDictionary(list);
            foreach (var item in dictionary)
            {
                Console.WriteLine($"{item.Key}, {item.Value}");
            }
            var convertedList = conversion.DictionaryToList(dictionary);
            foreach (var item in convertedList)

            {
                Console.WriteLine($"{item}");
            }
            Console.ReadLine();
        }

Thanks in advance.

CodePudding user response:

You can use LINQ's SelectMany and Enumerable.Repeat:

IList<string> list = dictionary
    .SelectMany(kv => Enumerable.Repeat(kv.Key, kv.Value))
    .ToList();

Here is also the opposite way to build your dictionary from the list:

var list = new List<string> { "Demo1", "Demo2", "Demo3", "Demo4", "Demo1", "Demo4" };
var dictionary = list.GroupBy(s => s).ToDictionary(g => g.Key, g => g.Count());

IList<string> list2 = dictionary
    .SelectMany(kv => Enumerable.Repeat(kv.Key, kv.Value))
    .ToList();

So at the end list2 contains the same strings as list but in a different order.

CodePudding user response:

Your dictionary consists of a key (string) and a value (int). After checking

if (!list.Contains(item.Key)) just add another loop which goes from 0 to the actual value from your dictionary-item and adds the new item n-times.

for (int i = 0; i < item.Value; i  ) // Demo1 and Demo4 runs 2x, Demo2 and Demo3 1x
    lst.Add(item.Key);

CodePudding user response:

Do you want something like this?

        Dictionary<string, int> dic = new Dictionary<string, int>();
        List<string> lst = new List<string>();

        dic.Add("Demo1", 2);
        dic.Add("Demo2", 1);
        dic.Add("Demo3", 1);
        dic.Add("Demo4", 2);

        foreach (var item in dic)
        {
            for (int i = 0; i < item.Value; i  )
            {
                lst.Add(item.Key);
            }
        }
  • Related