List<string> list1 = new List<string>(){"刘1","张1","王1"};
List<string> list2 = new List<string>(){"刘2","张2","王2"};
List<string> list3 = new List<string>(){"刘3","张3","王3"};
三个集合,给定条件是每个集合的元素个数一样多,要求把每个集合的同样索引值位置的字符串连接起来组成新的字符串,集合排的顺序要求从上到下排,也就是先排list1,再拍list2,再排list3
最后把所有组合后的字符串,再装进一个集合上面的查询结果为:
List<string> list_查询 = new List<string>(){"刘1刘2刘3","张1张2张3","王1王2王3"}; 
谢谢!

解决方案 »

  1.   


    void Main()
    {
    List<string> list1 = new List<string>(){"刘1","张1","王1"};
    List<string> list2 = new List<string>(){"刘2","张2","王2"};
    List<string> list3 = new List<string>(){"刘3","张3","王3"};
        List<string> list_查询= (from l1 in list1.Select((l,i)=>new {l,i})
                           join l2 in list2.Select((l,i)=>new {l,i})
       on l1.i equals l2.i
       join l3 in list3.Select((l,i)=>new {l,i})
       on l2.i equals l3.i
       select string.Format("{0}{1}{2}",l1.l,l2.l,l3.l)).ToList();

    list_查询.ForEach(l=>Console.WriteLine(l));
    /*
    刘1刘2刘3
    张1张2张3
    王1王2王3
    */
                           
    }
      

  2.   


    void Main()
    {
    List<string> list1 = new List<string>(){"刘1","张1","王1"};
    List<string> list2 = new List<string>(){"刘2","张2","王2"};
    List<string> list3 = new List<string>(){"刘3","张3","王3"};
        List<string> list_查询= (from l1 in list1.Select((l,i)=>new {l,i})
                           join l2 in list2.Select((l,i)=>new {l,i})
       on l1.i equals l2.i
       join l3 in list3.Select((l,i)=>new {l,i})
       on l2.i equals l3.i
       select string.Format("{0}{1}{2}",l1.l,l2.l,l3.l)).ToList();

       
                           
    }
      

  3.   

            public void TestMethod()
            {            List<List<string>> oldStringList = new List<List<string>>()
                {
                    new List<string>() { "刘1", "张1", "王1" },
                     new List<string>() { "刘2", "张2", "王2" },
                     new List<string>() { "刘3", "张3", "王3" }
                };            List<string> newStringList = new List<string>();            foreach (List<string> stringList in oldStringList)
                {
                    
                    int i = 0;
                    while (i<stringList.Count)
                    {
                        string s = stringList.ElementAtOrDefault(i);
                        if (newStringList.Count > i)
                        {
                            string s1 = newStringList[i] + s;
                            newStringList[i] = s1;
                        }
                        else
                        {
                            newStringList.Add(s);
                        }                    i++;
                    }
                }              }
      

  4.   

    这个也不难:void Main()
    {
     List<List<string>> oldStringList = new List<List<string>>()
    {
    new List<string>() { "刘1", "张1", "王1" },
    new List<string>() { "刘2", "张2", "王2" },
    new List<string>() { "刘3", "张3", "王3" },
    new List<string>() { "刘4", "张4", "王4" }
    };

    List<string> query=(from x in oldStringList.SelectMany(o=>o).Select((o,i)=>new {o,i})
    let length=oldStringList.First().Count()
    group x by x.i%length into g
    select string.Join("",g.Select(y=>y.o).ToArray())).ToList();

    query.ToList().ForEach(q=>Console.WriteLine(q));

    /*
    刘1刘2刘3刘4
    张1张2张3张4
    王1王2王3王4
    */
    }
      

  5.   

    注意在query前先做好CHECK工作:
    1. 所有子List的count必须大于1
    2. 所有子List的count必须相等,如你提问中所说(给定条件是每个集合的元素个数一样多)
     
      

  6.   

    我在5楼写的例子,是可以让list里面的count不一样的,也可以不大于1
      

  7.   

    let length=oldStringList.Where(x=>x.Count()>0).First().Count()
    空的集合 也没意思,过滤掉就是了