2017-10-29 32 views
0

我有4所列出串的更有效的方式來循環 - 這些都是相同的長度是否有通過多個列表

var nameList; 
var dateList; 
var versionList; 
var downloadList; 

我目前通過每個列表單獨循環,然後每增加的內容列出成併發隊列

var concurrentNameQueue= new ConcurrentQueue<string>(); 
var concurrentDateQueue= new ConcurrentQueue<string>(); 
var concurrentVersionQueue= new ConcurrentQueue<string>(); 
var concurrentDownloadQueue= new ConcurrentQueue<string>(); 

foreach (var name in nameList) 
{ 
    concurrentNameQueue.Enqeue(name); 
} 

foreach (var date in dateList) 
{ 
    concurrentDateQueue.Enqeue(date); 
} 

foreach (var version in versionList) 
{ 
    concurrentVersionQueue.Enqeue(version); 
} 

foreach (var download in downloadList) 
{ 
    concurrentDownloadQueue.Enqeue(download); 
} 

這個過程似乎非常重複性的和讓我不知道是否有循環更有效的方式通過所有這些名單

有沒有更有效的方法來做到這一點?

+1

看來,你可能想要考慮一個具有4個屬性的類,然後是類的一個列表 –

+0

而不是4個列表你還需要初始化隊列嗎? –

+0

我更新了我的帖子,包括隊列的初始化 –

回答

2
  1. 你可以寫一個擴展方法,然後調用它:

    public static void Enqueue<T>(this ConcurrentQueue<T> queue, IEnumerable<T> items) 
    { 
        foreach (var item in items) 
         queue.Enqueue(item); 
    } 
    
    concurrentNameQueue.Enqueue(nameList); 
    concurrentDateQueue.Enqueue(dateList); 
    concurrentVersionQueue.Enqueue(versionList); 
    concurrentDownloadQueue.Enqueue(downloadList); 
    
  2. 或者因爲你是初始化列表正上方,然後使用需要的second constructor作爲輸入的IEnumerable<T>

    var concurrentNameQueue = new ConcurrentQueue<string>(nameList); 
    var concurrentDateQueue = new ConcurrentQueue<string>(dateList); 
    var concurrentVersionQueue = new ConcurrentQueue<string>(versionList); 
    var concurrentDownloadQueue = new ConcurrentQueue<string>(downloadList); 
    

但正如我在我的評論中提到的,你應該創建一個具有4個屬性的類,每個屬性名稱,日期,版本和下載各一個。然後你有一個該類的列表,而不是保持4個列表同步。

+0

創建一個具有4個屬性的類的歡呼聲訣竅 –

+0

@LostBoy - 這當然是一個更好的設計 –

0

而不是製作多個列表,使用具有多個屬性的數據結構

這就是OOP的優點。創建的這個單列表,而不是

public class DownloadItem 
{ 
    public string Name { get; set; } 
    public string Date { get; set; } 
    public string Version { get; set; } 
    public string Download { get; set; } 
} 
相關問題