交叉或一对多

时间:2016-01-04 05:05:03

标签: c# loops for-loop one-to-many

表:



<table border="1">
  <tr>
    <td><b>Name</b></td>
    <td><b>Selection</b></td>
  </tr>
  <tr>
    <td>Color</td>
    <td>1,2,3</td>
  </tr>
  <tr>
    <td>Shape</td>
    <td>a,b</td>
  </tr>
  <tr>
    <td>Cut</td>
    <td>x</td>
  </tr>
  <tr>
    <td>Range</td>
    <td>y</td>
  </tr>
  <tr>
    <td>Purity</td>
    <td>8,9</td>
  </tr>
</table>
&#13;
&#13;
&#13;

我有一个关键词:颜色|形状|切|范围|纯度

我想循环选择列,需要结果如下

1axy8
1axy9
1bxy8
1bxy9
2axy8
2axy9
2bxy8
2bxy9
3axy8
3axy9
3bxy8
3bxy9

如何在选择列上循环?

1 个答案:

答案 0 :(得分:0)

您需要递归地解析数据以获得您要查找的结果 试试这段代码

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {

            DataTable dt = new DataTable();
            dt.Columns.Add("Name", typeof(string));
            dt.Columns.Add("Selection", typeof(string));

            dt.Rows.Add(new object[] { "Color", "1,2,3" });
            dt.Rows.Add(new object[] { "Shape", "a,b" });
            dt.Rows.Add(new object[] { "Cut", "x" });
            dt.Rows.Add(new object[] { "Range", "y" });
            dt.Rows.Add(new object[] { "Purity", "8,9" });

            Recursion recursion = new Recursion(dt);
            List<string> results = recursion.GetData(0);
        }
    }
    public class Recursion
    {
        public DataTable  data { get; set; }
        public Recursion(DataTable data)
        {
            this.data = data;
        }
        public List<string> GetData(int level)
        {
            if (level == data.Rows.Count - 1)
            {
                return data.Rows[level].Field<string>("Selection").Split(new char[] {','}).Select(x => x.ToString()).ToList();
            }
            else
            {

                List<string> children = GetData(level + 1);
                List<string> results = data.Rows[level].Field<string>("Selection").Split(new char[] { ',' }).Select(x => children.Select(y => x + "|" + y)).SelectMany(z => z).ToList();
                return results;
            }

        }
    }
}
​
​