Deva
Deva

Reputation: 139

How to make a list with Unique entries?

I want to make an MVC C# List with unique values in it. Here is the scenario. My List is like this:

List A

ItemNo       FileName 

001      =>   A.txt
001      =>   B.txt
002      =>   A.txt
002      =>   B.txt
003      =>   A.txt

I want to make it a new List like,

List B

ItemNo       FileName 

001      =>   A.txt, B.txt
002      =>   A.txt, B.txt
003      =>   A.txt

Is there any way that I can make it workable?

Upvotes: 3

Views: 231

Answers (2)

cuongle
cuongle

Reputation: 75326

You can use LINQ with GroupBy, assume you have class:

class Item
{
    public string ItemNo { get; set; }
    public string FileName { get; set; }
}

var result = list.GroupBy(item => item.ItemNo)
                 .Select(g => new Item
                   {
                       ItemNo = g.Key,
                       FileName = string.Join(", ",  g.Select(s => s.FileName))
                   });

Upvotes: 4

Kane
Kane

Reputation: 16812

Does this help?

Method

var result = new Dictionary<string, string>();
foreach (var fileAssistant in duplicateList)
{
    if (result.ContainsKey(fileAssistant.ItemNo))
    {
        result[fileAssistant.ItemNo] = string.Format("{0}, {1}", result[fileAssistant.ItemNo], fileAssistant.FileName);
    }
    else
    {
        result.Add(fileAssistant.ItemNo, fileAssistant.FileName);
    }
}

Setup

var duplicateList = new List<FileAssistant>(new[]
                                        {
                                            new FileAssistant("001", "A.txt"), 
                                            new FileAssistant("001", "B.txt"), 
                                            new FileAssistant("002", "A.txt"), 
                                            new FileAssistant("002", "B.txt"),
                                            new FileAssistant("003", "A.txt")
                                        });

File Assistant class

public class FileAssistant
{
    public FileAssistant() { }
    public FileAssistant(string itemNo, string fileName)
    {
        ItemNo = itemNo;
        FileName = fileName;
    }

    public string ItemNo { get; set; }
    public string FileName { get; set; }
}

Upvotes: 1

Related Questions