将字符串分组并添加到列表中

时间:2013-12-19 00:36:21

标签: c# asp.net .net string linq

我现在已经更新到复杂情况,我非常困难。如果你能分享一些亮点,请告诉我。

我不再将此作为List<string>。它现在是List<categories>,具有以下属性

public class Categories 
    {
        public string DisplayName { get; set; }
        public string ValueCode { get; set; }
        public string Count { get; set; }           
    }

这将具有像

这样的值
Category1/SubCategory1
cat1/sc1
5

Category1/SubCategory2
cat1/sc2
4

Category 2/Subcategory1
cat2/sc1
5

Category 2/Subcategory2
cat2/sc2
23

所以,我更新了我的现有JobCateogry Clas 等等。

 public class JobCateogry 
    {
        public string DisplayName { get; set; }
        public string ValueCode { get; set; }
        public string Count { get; set; }
        public List<JobCateogry> SubCategories { get; set; }
    }

我尝试拆分字符串并首先通过拆分然后通过分配将其分配给新类。 但我确信我的做法是错误的,因为在我分手的那一刻,我放松了计数。

var lstCategory =  Categories 
                        .Where(i => i.count > 0)
                        .Select(item => item.valueCode.Split('/')                                        
                        .Select(k =>(k)).ToList();

   List<JobCategories> jobcategories = lstCategory
                                      .Select(item => item.Split(QueryStringConstants.CAT_SEPERATOR.ToCharArray()[0]))
                                      .GroupBy(tokens => tokens[0].Trim(), tokens => tokens[1])
                            .Select(g => new JobCategories(g.Key,  g.DisplayName,g.ToList(),)).ToList();
你能帮帮忙吗?

(我需要按值代码拆分并显示DisplayName和Count)

*旧问题* 我有一个列表,其中包含类似这样的字符串

"Category1/SubType1"
"Category1/SubType2"
"Category1/SubType3"  
"Category1/SubType4" 
"Category2/SubType1"
"Category2/SubType2"   
"Category2/SubType3" 
"Category2/SubType4"

我有一个有两个属性的类。

public string Category { get; set; }
public  List<string> SubCategory{ get; set; }

我需要遍历列表,然后选择所有类别,然后为它们添加子类别。

我已对列表进行了排序,并且通过获取第一个字符串并与其余字符串进行比较,我可以通过执行for循环来实现传统方式。 我想知道是否有更简洁的方法来做到这一点?

3 个答案:

答案 0 :(得分:2)

拆分每个列表项,然后按类别名称分组应该得到所需的结果:

list.Select(item => item.Split('/'))
    .GroupBy(tokens => tokens[0], tokens => tokens[1])
    .Select(g => new TheClass
                     {
                         Category = g.Key,
                         SubCategory = g.ToList()
                     });

答案 1 :(得分:0)

您可以尝试这种方法:

var query = from input in inputs
            let split = input.Split('/')
            group split[1] by split[0] into grouping
            select new MyClass
            {
                Category = grouping.Key,
                SubCategory = grouping.ToList()
            };

答案 2 :(得分:0)

这样的事情应该有效

IEnumerable<string> items = GetSomeItems() ;

Widget[] list = items
                .Select( s => s.Split('/') )
                .GroupBy( x => x[0] , x => x[1] )
                .Select( g => new Widget( g.Key , g.ToList() ) )
                .ToArray()
                ;

给出这样的课程:

class Widget
{
  public Widget ( string category , IEnumerable<string> subcategories )
  {
    this.Category      = category ;
    this.Subcategories = subcategories.ToArray() ;
  }
  public string Category { get; private set; }
  public string[] Subcategories { get ; private set ; }
}