如何创建一个具有唯一条目的列表?

3
我可以帮你进行翻译。以下是内容:

我希望能够创建一个MVC C#列表,并且其中的值都是唯一的。下面是场景描述。我的列表如下:

List A

ItemNo       FileName 

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

我想把它变成一个新的列表,像这样:

列表B

ItemNo       FileName 

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

有没有办法让它可行?
2个回答

4
你可以使用 LINQ 和 GroupBy 进行操作,假设你有一个类:
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))
                   });

它并不能返回问题的确切结果,但比我提出的解决方案要好 :) - Kane
文件名列中不能输入重复的文件名。有没有办法可以限制文件名的重复?现在的结果是这样的:A.txt,B.txt,A.txt。我需要让它变成这样:A.txt,B.txt。 - Deva
@Deva:你可以继续使用 g.Select(s => s.FileName)).Distinct()。 - cuongle

1

这个能帮到您吗?

方法

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);
    }
}

设置

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")
                                        });

文件助手类

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; }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接