3 回答

TA貢獻(xiàn)1788條經(jīng)驗(yàn) 獲得超4個(gè)贊
你可以在 Linq 中使用它:
var m = Enumerable.Range(1, dailyCloseList.Count - 1) .Select(i => (dailyCloseList[i] - dailyCloseList[i - 1])/ dailyCloseList[i - 1]) .ToList();
檢查異??偸怯袔椭?。DivideByZero

TA貢獻(xiàn)1813條經(jīng)驗(yàn) 獲得超2個(gè)贊
另一種選擇是使用:Zip
var change = dailyCloseList.Zip(dailyCloseList.Skip(1)) .Select((x,y) => (y - x)/x) .ToList();

TA貢獻(xiàn)1843條經(jīng)驗(yàn) 獲得超7個(gè)贊
我認(rèn)為最林克的方式是這個(gè)
var dailyRetList = dailyCloseList
.ConsecutivePairs((a, b) => (b - a) / a)
.ToList();
當(dāng)然,你必須定義函數(shù)(曾經(jīng)在某個(gè)地方)。但與 Guaravsa 解決方案不同,它適用于 ,因此不需要直接索引訪問。但這一切都是有代價(jià)的。您最初的簡單循環(huán)比任何使用枚舉的解決方案快3倍左右(順便說一句,您應(yīng)該在開始時(shí)預(yù)先分配List以獲得最佳性能)。ConsecutivePairsIEnumerable
函數(shù)實(shí)現(xiàn),只是為了完整性:
public static IEnumerable<Q> ConsecutivePairs<T, Q>(this IEnumerable<T> sequence, Func<T, T, Q> selector)
{
using(var en = sequence.GetEnumerator())
{
if (!en.MoveNext()) { yield break; }
T prev = en.Current;
while (en.MoveNext())
{
yield return selector(prev, en.Current);
prev = en.Current;
}
}
}
- 3 回答
- 0 關(guān)注
- 129 瀏覽
添加回答
舉報(bào)