2011-04-18 3 views
0

저는 C#을 처음 사용합니다. 나는이문제 정렬 배열

id name  subject marks 
1  jhone  math  60 
2  smith  science 50 
3  clark  math  90 
1  jhone  science 80 
3  clark  science 56 
1  jhone  ecnomics 75 
2  smith  math  40 
3  clark  ecnomics 99 

같은 배열 값은 처음에는이

id name  subject marks 
1  jhone  math  60 
1  jhone  science 80 
1  jhone  ecnomics 75 

2  smith  science 50 
2  smith  math  40 

3  clark  math  90 
3  clark  science 56 
3  clark  ecnomics 99 

array.sort 명령과 같은 배열 작업을 정렬하려면이 확인

지금이

같은이 값과 대답 쇼을 연결하려면
1,jhone,math 60,science 80,ecnomics 75 
3,clark,math 90,science 56,ecnomics 99 

나는 콘텐츠를 표시하지 않기를 바랍니다. ID 2는 2 과목을 가지고 있습니다.이 경제학 결과는 보류 중입니다. 결과에서 위의 두 줄만 보여줍니다. 사전

+9

다음은 잘못된 방향으로 어떤 사람들을 문질러 수있는 '내 문제를 해결하시기 바랍니다'... '** 내 문제를 해결 ** 제발 도와주세요'입니다 :

List<String> concat = new List<String>(); foreach (var result in results) { if (result.Foo.Count() == 3) // has three options? { List<String> vals = new List<string>(); vals.AddRange(new[]{ result.ID.ToString(), result.Foo.ElementAt(0).Name }); foreach (var foo in result.Foo) vals.Add(String.Format("{0} {1}", foo.Subject, foo.Marks)); concat.Add(String.Join(",", vals.ToArray())); } } 

그리고 지금 concat는 항목이 당신이 무엇을 목표로해야하는지. – alex

+5

현재 코드를 게시 할 수 있습니까? – Shekhar

+0

* "그의 경제 결과는 계류 중입니다"* - 그래서 그는 경제학상의 결과가 없기 때문에 그는 전시되지 않을 것입니다. – Niklas

답변

0

에서

덕분에 당신은 LINQ 쿼리를 사용하여이 같은 특정 값을 가진 모든 항목을 얻을 수 있어야합니다. 예를 들어,

StringBuilder sb = new StringBuilder(); 
foreach (String n in studentNames) 
{ 
    IEnumerable<Record> query = from r in studentArray where r.Name == nameIter select r; 
    sb.Append(r.id.ToString() + "," + r.name); 
    foreach (Record r in query) 
    { 
     sb.Append("," + r.className); 
     sb.Append(" " + r.score) 
    } 
    sb.Append("\n"); 
} 

는 만 2 기록을 학생들에게 보여주지 몇 가지 다른 요구 사항을했지만, 당신이 원하는 것을 나에게 매우 명확하지 않았다.

0

배열을 정렬했으면 순차적으로 배열하여 각 학생에 대해 List을 작성하십시오. 학생 번호가 바뀌면 모든 과목이 커버되면 출력됩니다.

class StudentGrade 
{ 
    public int Id { get; private set; } 
    public string Name { get; private set; } 
    public string Subject { get; private set; } 
    public int Marks { get; private set; } 
    // Constructor and other things go here 
} 

그리고 당신은 당신이 분류 한 이들의 배열이 있습니다 :

이 클래스를 가지고 가정 지금

StudentGrade[] Grades; 

을, 당신은 출력에있는 각 학생에 대한 행을 원하는 모든 3 학년 :

List<StudentGrade> l = new List<StudentGrade>(); 
int LastId = -1; 
foreach (var grade in Grades) 
{ 
    if (grade.Id == LastId || LastId == -1) 
    { 
     // add this item to the list 
     l.Add(grade); 
    } 
    else 
    { 
     // New student. Output data for previous student. 
     if (l.Count == 3) 
     { 
      // output this student. 
     } 
     else 
     { 
      // student not output because not all grades are in. 
     } 
     LastId = grade.Id; 
     l.Clear(); 
     l.Add(grade); 
    } 
} 
// Check last student 
if (l.Count == 3) 
{ 
    // output last student 
} 
else 
{ 
    // don't output because not all grades are in 
} 

} 
1

나는 당신이 여기에서 무엇을 할 지 잘 모르니까, 만약 내가 오프베이스에 있다면 당신이 성취하려는 것을 조금 더 자세히 설명합니다.

먼저 당신이 사용하고있는 객체로 시작 : 그와

은 당신이 아주 쉽게 할 수있는 LINQ를 사용했다되고. 나는 그것을 Foo 명명했지만,이 (무엇이 것으로 보인다) 사용자가 제공 한 구조이다, 당신은 다음과 일치하는 결과를 당겨 ID로 통해 그룹과 종류 갈 수

public class Foo 
{ 
    public Int32 Id { get; set; } 
    public String Name { get; set; } 
    public String Subject { get; set; } 
    public Int32 Marks { get; set; } 
} 

다음 그 그룹 :

var results = from b in Bar      // Bar is my list of "Foo"s 
       orderby b.Id ascending   // order it by ID 
       group b by b.Id into grp  // then group them 
       select new 
       { 
        ID = grp.Key,     // re-grab the ID 
        Foo = grp 
       }; 

이제 우리는에 의해 results 및 필터를 통과은 "세 가지 옵션이"당신은 지정 될 것으로 보인다. 이것은 결과가 "산출 가능"이라고 결정하는 방법에 대해 더 근면 할 필요가있는 곳입니다.

1,jhone,math 60,science 80,economics 75 
3,clark,math 90,science 56,economics 99 
Press any key to continue . . . 
+0

그리고 여기에 실습 데모가 있습니다 : http://www.ideone.com/QvSK5 –