For Each on List return 项目是否按添加顺序排列?
Does For Each on List return items in order of addition?
如果我将项目添加到 List(Of T)
,然后使用 For Each
对其进行迭代,是否保证它们按照添加的相同顺序访问?
或者就此而言,它们是否添加到与添加顺序相关的索引处? (即第一个添加的对象位于索引 0,第二个添加的对象位于索引 1,依此类推)
例如:下面的代码能否保证从两个循环中打印输出“0 1 2”?
Private MyList As New List(Of Integer)
MyList.Add(New Integer(0))
MyList.Add(New Integer(1))
MyList.Add(New Integer(2))
For Each n As Integer In MyList
Console.Write(n.ToString & " ")
Next
For i As Integer = 0 To MyList.Count - 1
Console.Write(MyList(i).ToString & " ")
Next
编辑:感谢您指出In what order does a C# for each loop iterate over a List<T>?
回答了这个问题的第一部分
然而,第二部分进一步限定了问题。链接的问题指出是的,For Each
从索引 0
迭代到索引 count - 1
。但是 .Add() 方法是否总是在下一个未使用的最高索引处添加?
是的,每个添加到 List 的元素都会获得更高的索引。所以第一个总是 0,第二个总是 1 等等。
Foreach 将始终从头到尾循环列表。如果你喜欢从头开始做,你可以使用 FOR 循环,或者你可以按照你喜欢的方式对列表进行排序 (f.e.LINQ).
验证这一点的最简单方法就是调试您的代码。
使用您提供的代码(进行了少量修改):
Sub Main()
Dim MyList As New List(Of Integer)
MyList.Add(0)
MyList.Add(1)
MyList.Add(2)
For Each n As Integer In MyList
Console.Write(n.ToString & " ")
Next
For i As Integer = 0 To MyList.Count - 1
Console.Write(MyList(i).ToString & " ")
Next
Console.Read()
End Sub
输出将是:
0 1 2 0 1 2
如果您想在中间某处插入一个元素,您可以使用:
MyList.Insert(position, value)
如果我将项目添加到 List(Of T)
,然后使用 For Each
对其进行迭代,是否保证它们按照添加的相同顺序访问?
或者就此而言,它们是否添加到与添加顺序相关的索引处? (即第一个添加的对象位于索引 0,第二个添加的对象位于索引 1,依此类推)
例如:下面的代码能否保证从两个循环中打印输出“0 1 2”?
Private MyList As New List(Of Integer)
MyList.Add(New Integer(0))
MyList.Add(New Integer(1))
MyList.Add(New Integer(2))
For Each n As Integer In MyList
Console.Write(n.ToString & " ")
Next
For i As Integer = 0 To MyList.Count - 1
Console.Write(MyList(i).ToString & " ")
Next
编辑:感谢您指出In what order does a C# for each loop iterate over a List<T>?
回答了这个问题的第一部分然而,第二部分进一步限定了问题。链接的问题指出是的,For Each
从索引 0
迭代到索引 count - 1
。但是 .Add() 方法是否总是在下一个未使用的最高索引处添加?
是的,每个添加到 List 的元素都会获得更高的索引。所以第一个总是 0,第二个总是 1 等等。 Foreach 将始终从头到尾循环列表。如果你喜欢从头开始做,你可以使用 FOR 循环,或者你可以按照你喜欢的方式对列表进行排序 (f.e.LINQ).
验证这一点的最简单方法就是调试您的代码。 使用您提供的代码(进行了少量修改):
Sub Main()
Dim MyList As New List(Of Integer)
MyList.Add(0)
MyList.Add(1)
MyList.Add(2)
For Each n As Integer In MyList
Console.Write(n.ToString & " ")
Next
For i As Integer = 0 To MyList.Count - 1
Console.Write(MyList(i).ToString & " ")
Next
Console.Read()
End Sub
输出将是:
0 1 2 0 1 2
如果您想在中间某处插入一个元素,您可以使用:
MyList.Insert(position, value)