带有唯一条目的C#列表

时间:2012-08-20 04:07:42

标签: asp.net-mvc-3 list

我有一个这样的清单,

List A

ItemNum                  FileName

001                      A.txt,B.txt,A.txt,B.txt
002                      A.txt,C.txt,A.txt,C.txt

我需要制作一个这样的清单。

ItemNum                  FileName

001                      A.txt,B.txt
002                      A.txt,C.txt

有什么办法吗?

3 个答案:

答案 0 :(得分:1)

区分大小写,采用方法格式:

public List<string> ToDistinct(IEnumerable<string> input)
{
    List<string> unique = new List<string>();

    foreach (string s in input)
    {
        List<string> files = s.Split(',').ToList();
        unique.Add(String.Join(",", files.Distinct()));
    }

    return unique;
}

这是一个控制台方法,可以显示上面的输出,如果您愿意,可以调整它:

public static void Main(string[] args)
{
    List<string> input = new List<string>{"A.txt,B.txt,A.txt,B.txt", "A.txt,C.txt,A.txt,C.txt"};

    //Display Input
    Console.WriteLine("Input");
    Console.WriteLine("ItemNum                  FileNames");
    for(int i = 0; i < input.Count(); i++)
    {
        Console.WriteLine(String.Format(" {0,-23:000}{1}", i + 1, input[i]));
    }

    //Build the Unique List
    List<string> unique = new List<string>();

    foreach (string s in input)
    {
        List<string> files = s.Split(',').ToList();
        unique.Add(String.Join(",", files.Distinct()));
    }

    //Display Output
    Console.WriteLine();
    Console.WriteLine("Output");
    Console.WriteLine("ItemNum                  FileNames");
    for(int i = 0; i < unique.Count(); i++)
    {
        Console.WriteLine(String.Format(" {0,-23:000}{1}", i + 1, unique[i]));
    }

    Console.ReadKey();
}

答案 1 :(得分:0)

我建议您将FileName转换为List<string>,然后您只需要:

listA.ForEach(x => x.FileNames = x.FileNames.Distinct().ToList());

如果你没有具体的理由存储什么是 - 对于所有意图 - 字符串中的列表..为什么不将它存储为一个? List<string>将允许您根据需要添加和删除。

答案 2 :(得分:0)

List<Item> list = new List<Item>();
list.Add(new Item("001", "A.txt,B.txt,A.txt,B.txt"));
list.Add(new Item("002", "A.txt,C.txt,A.txt,C.txt"));
var newList = from l in list
              select new Item() { ItemNum = l.ItemNum, 
                                  FileName = string.Join(",", l.FileName.Split(',').Distinct()) };