来自锯齿状 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();
}
我有一个数组
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();
}