我想以這樣一種方式遍歷某些串列項,即從特定位置開始,然后從它向左移動,然后從它向右移動。
換句話說,是這樣的:
var items = new List<string>() { "Item1", "Item2", "Item3", "Item4", "Item5" };
string item = "Item3";
int index = items.IndexOf(item);
for (int i = index; i >= 0; i--)
yield return items[i];
for (int i = index 1; i < items.Count; i )
yield return items[i];
結果是:Item3, Item2, Item1, Item4,Item5
有沒有辦法實作這一點,但只使用一個 for 回圈?
或者在 LINQ 中是否有某種條件方向?
uj5u.com熱心網友回復:
您可以在索引上使用三元 if 和一些簡單的算術來實作這一點。
for (int i = 0; i < items.Count; i )
yield return i <= index ? items[index - i] : items[i];
結果:
Item3
Item2
Item1
Item4
Item5
uj5u.com熱心網友回復:
您不能使用一個回圈同時使用兩個回傳值,但可以獲取資料。
for (int i = index; i >= 0; i--)
{
string answer1 = items[i]; //2,1,0
if(items.Count - i < items.Count)
string answer2 = items[items.Count - i]; // 3,4
}
uj5u.com熱心網友回復:
也許像這樣的東西,用元組解構:
var items = new List<string>() { "Item1", "Item2", "Item3", "Item4", "Item5" };
string item = "Item3";
int index = items.IndexOf(item);
for ((int i, int j) = (index, 0); j < items.Count; i--, j ){
if(i>=0){
yield return items[i];
} else {
yield return item[j];
}
}
uj5u.com熱心網友回復:
使用pythonic方式的另一個解決方案是使用Enumerable.Range.
foreach (int i in Enumerable.Range(0, index 1).Reverse().Union(Enumerable.Range(index 1, items.Count - index - 1)))
yield return items[i];
但在性能和可維護性方面,我會使用您現有的解決方案使用兩個單獨的 for-loops。
在使您的代碼的意圖更清楚方面,我會items.Take(3).Reverse().Concat(items.Skip(3))直接說明會發生什么。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/402078.html
下一篇:For回圈硒點擊
