내 사용자 지정 컬렉션 (트리)에 대해 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))
답변
이를 위해 Skip
LINQ to Objects 의 메서드 를 사용하여 주어진 요소 수를 건너 뛰는 것이 가장 쉽습니다 .
foreach (var value in sequence.Skip(1)) // Skips just one value
{
...
}
다른 수의 요소를 건너 뛰려면 다른 값에 대해 1을 변경하십시오.
마찬가지로 Take
반환되는 요소의 수를 제한하는 데 사용할 수 있습니다 .
Edulinq 블로그 시리즈에서이 두 가지 (및 관련 SkipWhile
및 TakeWhile
방법)에 대해 자세히 알아볼 수 있습니다 .
답변
Enumerable.Skip 을 사용 하여 일부 요소를 건너 뛰고 거기서 시작하도록 할 수 있습니다 .
예를 들면 :
foreach(item in theTree.Skip(9)) // Skips the first 9 items
{
// Do something
그러나 트리를 작성하는 경우 트리 항목 자체에 멤버를 제공하여 IEnumerable<T>
거기에서 열거 할 새 항목을 반환 할 수 있습니다. 이것은 잠재적으로 장기적으로 더 유용 할 것입니다.
답변
Foreach
구현에 의해 정의 된 방식으로 컬렉션을 반복합니다 IEnumerable
. 따라서 요소를 건너 뛸 수 있지만 (위에서 제안한대로) 여전히 기술적으로 동일한 순서로 요소를 반복합니다.
달성하려는 것이 확실하지 않지만 클래스에는 여러 IEnumerable
속성이 있을 수 있으며 각 속성은 특정 순서로 요소를 열거합니다.
답변
에서 행 읽기를 건너 뛰려면 다음을 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 행을 건너 뛰고 하나 에서 다른 것으로 내용이 복사 됩니다.