如何将列表<t>分组到List <list <t>&gt;基于C#中的一些标准

时间:2017-01-22 16:26:06

标签: c#

我有一个像这样的数组列表:

public class FileOperations {

  public static void main(String[] args) throws FileNotFoundException {
    String searchTerm = args[0];
    String fileName1 = args[1];
    String fileName2 = args[2];
    File file = new File(fileName1);
    Scanner scan = new Scanner(file);

    while (scan.hasNextLine()) {
      if (searchTerm != null) {
        try {
          BufferedWriter bw = null;
          bw = Files.newBufferedWriter(Paths.get(fileName2), StandardOpenOption.CREATE, StandardOpenOption.APPEND);
          bw.write(searchTerm);
          bw.close();
        } catch (IOException ioe) {
          ioe.printStackTrace();
        }


      }
      scan.nextLine();
    }
    scan.close();
  }
}

我希望能够从String列表中创建这样的列表:

List<string[]> definitions

  MATERIAL  "STEEL"    TYPE "Steel"    WEIGHTPERVOLUME 7833.414
  MATERIAL  "STEEL"    SYMTYPE "Isotropic"  E 2.038902E+10  
  MATERIAL  "STEEL"  FY 3.515348E+07  FU 4.569952E+07 
  MATERIAL  "STEEL"  HYSTYPE "Kinematic"  SSTYPE "Simple"   
  MATERIAL  "CONC"    TYPE "Concrete"    WEIGHTPERVOLUME 2402.616
  MATERIAL  "CONC"    SYMTYPE "Isotropic"  E 2.531051E+09  U 0.2
  MATERIAL  "CONC"    FC 2812279
  MATERIAL  "CONC"  HYSTYPE "Concrete"  ENERGYDEGFACT 0
  MATERIAL  "OTHER"    TYPE "Other"    WEIGHTPERVOLUME 7833.414
  MATERIAL  "OTHER"    SYMTYPE "Isotropic"  E 2.038902E+10
  MATERIAL  "OTHER"  DESIGNTYPE "OTHER"  
  MATERIAL  "OTHER"  HYSTYPE "Elastic"  IOTENSION 0.01
  MATERIAL  "OTHER"  STRAIN -1 STRESS -1 
  MATERIAL  "OTHER"  STRAIN 0 STRESS 0 POINTID "A"  
  MATERIAL  "OTHER"  STRAIN 1 STRESS 1 

并根据每个数组中的第二个元素分隔列表:

definitions

3 个答案:

答案 0 :(得分:0)

为什么不使用GroupBy

var listOfGroups = definitions.GroupBy(x => x.Material);

您将获得一个元素列表,其中包含Key和分组对象列表。

这是similar question

答案 1 :(得分:0)

不仅仅是GroupBy数组中的第二个elemtn:

var groups = definitions.GroupBy(x => x[1]);

它不是一个列表,你得到了什么,它是IEnumerable<IGrouping<string, string[]>>但我认为它正是你想要的。

答案 2 :(得分:-2)

尝试使用DataTable并使用LINQ进行过滤

DataTable dt=new DataTable();
//Add the data in it
dt.Where() or dt.Select();