【发布时间】:2022-01-03 09:20:05
【问题描述】:
我想以这样一种方式遍历一些列表项,即从特定位置开始,然后从它向左走,然后从它向右走。
换句话说,是这样的:
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 中是否有某种条件方向?
【问题讨论】:
-
类似
items.Skip(2).Concat(items.Take(2))? -
@C.Evenhuis 会导致
3,4,5,1,2,而不是3,2,1,4,5 -
我会选择
items.Take(3).Reverse().Concat(items.Skip(3)) -
你为什么要这个?您当前的解决方案是有效的、可读的并且只对您的列表进行一次迭代。任何 LINQ 解决方案都会多次迭代您的项目,没有 LINQ 的解决方案会损害可读性。