【发布时间】:2012-01-02 10:44:02
【问题描述】:
我想在不使用 for 循环或 foreach 循环的情况下为所有 list<int> 成员加 3?我可以在一行中做到这一点吗?如何?
【问题讨论】:
我想在不使用 for 循环或 foreach 循环的情况下为所有 list<int> 成员加 3?我可以在一行中做到这一点吗?如何?
【问题讨论】:
某事某处将不得不循环。你不必循环你的代码,但有些东西必须这样做。
我想不出任何可以修改列表中所有元素的临时方法,但是使用 LINQ 你可以轻松地创建一个 new List<int>:
var plusThree = originalList.Select(x => x + 3).ToList();
或 pre-LINQ(效率稍高,但也更 List<T>-specific):
var plusThree = originalList.ConvertAll(x => x + 3);
但这两个都会在幕后循环播放。
您可能会创建一个投影IList<T> 实现,懒惰地 应用投影(或者如果您想要真正花哨的话,可能是双射)...但这将是大量的工作。
【讨论】:
您必须更改列表本身的值,因此没有其他方法可以在 for 循环中执行此操作,除非您被允许创建一个新列表,否则您可以使用 Linq(它将在它的自己的代码)。
for(int i = 0; i < list.Count; i++) list[i]+=3;
【讨论】:
另一种方法(当然感觉就像在没有实际编写的情况下编写 foreach 循环)
static void Main(string[] args)
{
List<int> list = new List<int>();
list.Add(1);
list.Add(2);
list.Add(3);
list.Add(4);
list.Add(5);
int k = 0;
list.ForEach(delegate(int i) { list[k++] = i+3; });
foreach (var item in list)
{
Console.WriteLine(item.ToString());
}
Console.ReadKey();
}
【讨论】: