如何在升c的每个循环中跳过a中的特定位置
本文关键字:位置 定位 循环 | 更新日期: 2023-09-27 18:12:40
List<string> liste = new List<String>
{
"A","B","C","D"
};
foreach (var item in liste)
{
System.Diagnostics.Debug.WriteLine(item.ToString());
}
for (int i = 0; i < liste.Count; i++)
{
if (i == 0)
continue;
System.Diagnostics.Debug.WriteLine(liste[i].ToString());
}
如何跳过foreach循环中的特定位置?我不想求任何值,只是跳过位置x。
必须是一个特定的位置。可以选择位置0或者位置7
很容易跳过列表中的第一项:
foreach(var item in list.Skip(1))
{
System.Diagnostics.Debug.WriteLine(item.ToString());
}
如果您想跳过索引n
处的任何其他元素,您可以这样写:
foreach(var item in list.Where((a,b) => b != n))
{
System.Diagnostics.Debug.WriteLine(item.ToString());
}
在这个例子中,我使用了一个lambda表达式,它有两个参数:a
和b
。参数a
为该项本身,参数b
为该项的索引。
MSDN上描述这些扩展方法的相关页面如下:
- IEnumerable.Skip ()
- IEnumerable.Where ()
您甚至可以编写自己的扩展方法,允许您跳过列表中的元素:
public static class MyEnumerableExtensions
{
public static IEnumerable<T> SkipAt<T>(this IEnumerable<T> list, int index)
{
var i = 0;
foreach(var item in list)
{
if(i != index)
yield return item;
i++;
}
}
}
你可以这样写来跳过一项:
foreach(var item in list.SkipAt(2))
{
System.Diagnostics.Debug.WriteLine(item.ToString());
}
foreach
循环遍历实现IEnumerable
的集合。枚举数公开当前项和移动到下一项的方法——它没有索引的概念。
你可以这样做:
var i = 0;
foreach (var item in liste) {
if (i++ == skip) continue;
Debug.WriteLine(item.ToString());
}
但这似乎没有必要。如果你需要索引,使用for
循环。
另一种选择是在迭代之前从List
中删除不需要的项:
foreach (var item in liste.Take(n-1).Union(liste.Skip(n))) {
Debug.WriteLine(item.ToString());
}
我喜欢list的。foreach,这里是我使用@Elian的。skipat (n)和。foreach:
var list = new List<String> { "A", "B", "C", "D" };
list = list.SkipAt(1).ToList();
list.ForEach(Debug.WriteLine);
您应该尝试使用增强版的Where扩展方法,它允许您对项目和索引进行过滤。
检查引用。http://msdn.microsoft.com/en-us/library/bb549418.aspx
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Verbatim list");
List<string> list = new List<String> { "A","B","C","D" };
foreach (var item in list)
{
Console.WriteLine(item.ToString());
}
Console.WriteLine("Filtered list");
int itemToSkip = 2;
foreach (var item in list.Where((item, index) => index != itemToSkip))
{
Console.WriteLine(item.ToString());
}
Console.ReadKey();
}
}
}
这会给你如下的输出:
Verbatim list
A
B
C
D
Filtered list
A
B
D
要跳过foreach循环中的位置,一种选择是使用if语句跳过foreach循环中的操作,如
foreach(var item in liste)
{
if (item != 'X')
{
//do something
}
}
但我在等待更好的解决方案