2016-09-20 5 views
0

내 애플 리케이션에서 개체의 배열을 가지고. 각 개체에는 URL이 포함 된 List이 포함되어 있습니다. 나는 순서대로 Lists 항목을 표시하는 데 원한다주문 개체 목록 항목

First item from first objects list 
First item from second objects list 
First item from third objects list 
Second item from first objects list 
.. 
etc 

을 지금 내가 foreach 루프를 사용하여 오전 :

public string ShowData() 
{   
     string singleItem = LinksArray.First(); 
     LinksArray.RemoveAt(0); 
     return singleItem;    
} 

그것을 : 아이템을 얻을 수

  foreach (Account acc in account) 
      { 
        listBox1.Items.Add(acc.ShowData()) 
      } 

그리고 공공 방법 Account 내부 클래스를 작동하지만 더 우아한 방법이있을 것이라고 생각합니다. 너는 어떤 생각을 가지고 있니?

+0

아마 더 적합 http://codereview.stackexchange.com/ – Knetic

답변

2

은 인덱스에 의해 다음 인덱스/URL 쌍의 세트 순서로 모든 것을 평평하게 시도해보십시오

var orderedUrls = objects 
    .SelectMany(o => o.Urls.Select((url, idx) => new { Index = idx, Url = url })) 
    .OrderBy(indexedUrl => indexedUrl.Index) 
    .Select(indexedUrl => indexedUrl.Url) 
+0

두 사람이 서로의 30 초 이내에 그것을 내면 좋은 해결책이되어야합니다. 나는 당신의 명명 규칙을 더 좋아하고'SelectMany'의 사용은'Select' /'Concat'보다 조금 깔끔합니다. – Enigmativity

0

이 나를 위해 작동합니다

List<Uri>[] arrayOfListsOfUris = ... 

IEnumerable<Uri> sorted = 
    arrayOfListsOfUris 
     .Select(xs => xs.Select((x, n) => new { x, n })) 
     .Concat() 
     .OrderBy(y => y.n) 
     .Select(y => y.x); 

foreach (Uri uri in sorted) 
{ 
    //Do something with each Uri 
} 
0

ShowData가 데이터를 수정해서는 안이라는 방법이 보여주고있다. 대신, 당신은 이런 식으로 더 잘 봉사 할 수 있습니다;

public IEnumerable<String> GetData() 
{ 
    return LinksArray; 
} 

그런 다음 사용할 수 있습니다.

foreach(Account acc in accounts) 
{ 
    foreach(String data in acc.GetData()) 
    { 
     // add to listbox items 
    } 
} 

이렇게하면 데이터와 사용자가 표시하고 읽는 방식이 명확하게 구분됩니다. 또한 선택적으로 LINQ를 사용할 수 있도록 열어줍니다.