2015-09-28 57 views
0

我有一個單一的數據結構,其中包含相對較少的對象(ca. 1500)和幾個方法正在對其進行操作。是否有編程模式來遍歷數據的方法,而不是編寫更多的樣板代碼?編程模式 - 單一數據結構 - 多種方法

+0

聽起來更像是http://programmers.stackexchange.com對我的問題。 –

+1

我不完全理解你在找什麼,你做了一個評論「所有的方法都是對數據進行單獨的計算,然後將結果返回給結果對象」,爲什麼niot創建自己的對象,它有一個支持列表,以及該類別的部分功能 – 3dd

+0

只要OP未添加示例,投票就會「不清楚」。 –

回答

1

這取決於您使用的語言。但是,您正在尋找的概念map

它通常是這樣的:

map f xs 

在命令式的風格,這將是:

for (int i = 0; i < xs.size(); i++) { 

    f(xs[i]) 
} 

我剛纔看到的C#代碼。

在C#中,您可以使用功能風格,命令風格或兩者兼有。如果您使用功能樣式,則可以使用LINQ。但是,您的方法不應該修改底層對象,因爲LINQ語句應該沒有副作用。對於強制性風格,您只能使用foreach


您可以使用LINQ查詢集合。例如,這會發現所有xmyObjects這樣f(x)

var fs = myObjects.Where(x => f(x)) 
+0

這不是將相同的函數應用於列表的每個元素,而是將幾個函數應用於單個列表。例如。我有一個包含1000個項目和5個函數f,g,h,i和j的列表,其中每個函數檢查不同的東西,並且需要單獨返回結果。 – narain

+0

您想要選擇的功能是「f」,「g」,「h」等嗎?即「我想找到所有元素'x',這樣'f(x')?」 – sdgfsdh

+0

類別。所有方法都在對數據進行單獨計算,然後將結果返回到結果對象中。 – narain

0

如果這些方法之間的共性就是他們採取的列表作爲輸入和輸出的結果,但結果是不同類型的每一次,你都不會去重複。如果有一些通用的抽象的結果類型,而不是,你可以把它模型簡單地作爲一個系列:

Func<IEnumerable<TInput>, TResult> 

然後如果你想變平的輸出,你可以Select()Invoke()荷蘭國際集團這些功能(或SelectMany()結果出)。

或者,你可以有一系列的

Func<TInput, TResult> 

和重複數據列表上,通過一個應用全部功能,每個元素之一。但是,然後結果將按1500個數據元素中的每一個進行排序,而不是將每個函數的完整執行串聯起來。

相關問題