내 사용자 지정 컬렉션 (트리)에 대해 IEnumerable을 구현하여 foreach를 사용하여 트리를 순회 할 수 있도록 생각하고 있습니다. 그러나 내가 아는 한 foreach는 항상 컬렉션의 첫 번째 요소에서 시작됩니다. foreach가 시작되는 요소를 선택하고 싶습니다. foreach가 시작되는 요소를 어떻게 든 변경할 수 있습니까?
내 사용자 지정 컬렉션 (트리)에 대해 IEnumerable을 구현하여 foreach를 사용하여 트리를 순회 할 수 있도록 생각하고 있습니다. 그러나 내가 아는 한 foreach는 항상 컬렉션의 첫 번째 요소에서 시작됩니다. foreach가 시작되는 요소를 선택하고 싶습니다. foreach가 시작되는 요소를 어떻게 든 변경할 수 있습니까?
답변:
예. 다음을 수행하십시오.
Collection<string> myCollection = new Collection<string>;
foreach (string curString in myCollection.Skip(3))
//Dostuff
Skip
현재 인덱스에서 시작하여 지정한 개수만큼 건너 뛰는 IEnumerable 함수입니다. 반면에 처음 세 개만 사용하려면 .Take
다음 을 사용하십시오 .
foreach (string curString in myCollection.Take(3))
이것들은 함께 쌍을 이룰 수도 있으므로 4-6 개의 항목 만 원하면 다음을 수행 할 수 있습니다.
foreach (string curString in myCollection.Skip(3).Take(3))
foreach(List<string> row in rows.skip(1)){ row[0] = "newInfo"; }
대 for(int i=1; i<rows.Count;i++){ List<string> row = rows[i]; row[0] = "newStuff"; }
이를 위해 Skip
LINQ to Objects 의 메서드 를 사용하여 주어진 요소 수를 건너 뛰는 것이 가장 쉽습니다 .
foreach (var value in sequence.Skip(1)) // Skips just one value
{
...
}
다른 수의 요소를 건너 뛰려면 다른 값에 대해 1을 변경하십시오.
마찬가지로 Take
반환되는 요소의 수를 제한하는 데 사용할 수 있습니다 .
Edulinq 블로그 시리즈에서이 두 가지 (및 관련 SkipWhile
및 TakeWhile
방법)에 대해 자세히 알아볼 수 있습니다 .
sequence
합법적으로 null
그럴 수 있는지 여부 를 모릅니다 . 이 ... 정말 문제의 일부가 아니다 - 아마도 영업 이익은 스스로 것을 처리 할 수
Enumerable.Skip 을 사용 하여 일부 요소를 건너 뛰고 거기서 시작하도록 할 수 있습니다 .
예를 들면 :
foreach(item in theTree.Skip(9)) // Skips the first 9 items
{
// Do something
그러나 트리를 작성하는 경우 트리 항목 자체에 멤버를 제공하여 IEnumerable<T>
거기에서 열거 할 새 항목을 반환 할 수 있습니다. 이것은 잠재적으로 장기적으로 더 유용 할 것입니다.
IEnumerable<T> SubTree(rootIndex)
? 좋은 전화!
IEnumerable<MyTreeElement> Children
할 수 있으므로 다음 과 같이 할 수 있습니다.- foreach(var item in someElement.Children)
확장 메서드 IMO를 사용하는 것보다 훨씬 더 명확합니다.
에서 행 읽기를 건너 뛰려면 다음을 DataGridView
시도하십시오.
foreach (DataGridViewRow row in dataGridView1.Rows.Cast<DataGridViewRow().Skip(3))
DataGridView
행을 건너 뛰는 다른 내용을 복사하려면 다음을 시도하십시오.
foreach (DataGridViewRow row in dataGridView1.Rows.Cast<DataGridViewRow>().Skip(3))
{
foreach (DataGridViewCell cell in row.Cells)
{
string value = cell.Value.ToString();
dataGridView2.Rows[i].Cells[j].Value = cell.Value.ToString();
j++;
}
i++;
j = 0;
}
이렇게하면 DataGridView
3 행을 건너 뛰고 하나 에서 다른 것으로 내용이 복사 됩니다.
DataGridView
(또는 심지어 UI 프레임 워크).