来自锯齿状 Array[][] 的子数组[][]

Subarrays[][] from jagged Array[][]

我有一个数组
string[][] 其中数据将如下所示:

p,x,y,w,t,p,f,c,n,n,e,e,s,s,w,w,p,w,o,p,k,s,u
e,x,s,g,f,n,f,w,b,k,t,e,s,s,w,w,p,w,o,e,n,a,g
e,x,y,y,t,a,f,c,b,n,e,c,s,s,w,w,p,w,o,p,k,n,g
e,b,s,w,t,a,f,c,b,g,e,c,s,s,w,w,p,w,o,p,k,n,m
e,b,y,w,t,l,f,c,b,n,e,c,s,s,w,w,p,w,o,p,n,s,m
p,x,y,w,t,p,f,c,n,p,e,e,s,s,w,w,p,w,o,p,k,v,g
.
.
.

列是属性(例如,第一个列有 2 个值 (p,e) 我正在尝试根据属性值创建子数组,例如

subarray1
p,x,y,w,t,p,f,c,n,n,e,e,s,s,w,w,p,w,o,p,k,s,u
p,x,y,w,t,p,f,c,n,n,e,e,s,s,w,w,p,w,o,p,k,s,u

subarray2
e,x,s,g,f,n,f,w,b,k,t,e,s,s,w,w,p,w,o,e,n,a,g
e,x,y,y,t,a,f,c,b,n,e,c,s,s,w,w,p,w,o,p,k,n,g
e,b,s,w,t,a,f,c,b,g,e,c,s,s,w,w,p,w,o,p,k,n,m
e,b,y,w,t,l,f,c,b,n,e,c,s,s,w,w,p,w,o,p,n,s,m
.
.

我试过这个:

 public string[][] subSets2(string[][] _dataSet, int AttributeID, int value)
        {
            string[][] SS=new string[_dataSet.Length][];
            List<string> values=Transpose(_dataSet)[AttributeID].Distinct().ToList();
            int t= 0;
            string[][] tempSS = Transpose(_dataSet);
            for (int i= 0;i< _dataSet.Length;i++)
            {
                SS[t]= new string[_dataSet[i].Count()];
                for (int j = 0; j<_dataSet[i].Count() ; j++)
                {
                    if (_dataSet[i][j].Equals(values[value]) && AttributeID== j)
                    {
                        SS[t][j] = _dataSet[i][j];
                            t++;
                    }
                }
            }
            return SS;
        }

如果你想根据给定的列创建子数组,你可以使用 linq,如下所示:

var subarrays = _dataSet.GroupBy(r => r[0]).Select(r => r.ToArray()).ToArray();

r[0] 指的是每个数组中的第一项。您可以更改索引以按不同的列分组。

我不确定我是否理解这个问题,但如果我理解了,那么您想要一个锯齿状数组,其中包含以特定字符串("p" 或 "e").
如果是这种情况,您可以简单地使用 linq 的 where 扩展方法:

public string[][] subSets(string[][] _dataSet, string valueOfFirstCell)
{
    return _dataSet.Where(d => d[0] == valueOfFirstCell).ToArray();
}