2016-03-14 3 views
0

У меня есть массив
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 
. 
. 
. 

colums являются атрибутами (например, первый столбец имеет 2 значения (р, е) Я пытаюсь создать вложенные массивы на основе значений атрибутов, например

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; 
     } 

+0

Что такое ошибка? – Domysee

+0

@Domysee Я получаю только столбец со значением, например. [Р, р, р, р] – user3785803

ответ

2

Если вы хотите создать вложенные массивы, основанные на данной колонке вы можете использовать LINQ следующим образом:

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

r[0] относится к первому элементу в каждом массиве. Вы можете изменить индекс на группу другим столбцом.

0

Я не уверен, что я понимаю вопрос, но если да, то вы хотите получить зубчатый массив, содержащий все массивы, которые начинаются с определенной строки («p» или «e»).
Если это так, то вы можете просто использовать метод where расширения Linq в:

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