우선 작성한 코드입니다.
foreach (ListViewItem lvi in lstv.SelectedItems)
{
int num = lvi.Index;
FileInfo fileinfo = new FileInfo(lvi.Tag + "\\" + lvi.Text);
if (fileinfo.Exists)
{
fileinfo.Delete();
imagelist.Images.RemoveAt(lvi.Index - cnt);
lstv.Items.RemoveAt(lvi.Index - cnt);
cnt++
for (int i=num; i<lstv.Count; i++)
{
lstv.Items[i].ImageIndex = i;
}
lstv.Refresh();
}
}
foreach 구문 질문입니다.
리스트뷰에서 다중선택을 해서
삭제하는 코드를 아래와같이 작성했는데
알고리즘이 마음에 안들어서 질문드려봅니다.
삭제할 index를 foreach문으로 가지고 오게되면
오름차순으로 반복문이 되서
리스트뷰에 0~10까지 있을때 1,2,5,7을 선택했다면
1,2,5,7순으로 index를 가지고 와서
파일삭제하고, 이미지리스트와 리스트뷰에 있는 목록을 제거합니다.
여기서 문제가 있습니다.
foreach에서 오름차순으로 값이 들어올때
물론 아래와 같이 for을 돌려서하면 정상적으로 되는데
1,2,5,7을 삭제했다면
1~9 = 9
1~8 = 8
3~7 = 5
4~6 = 3
for문이 돌아가는데 27번입니다.
만약,
foreach에서 내림차순으로 값이 들어올때
7~9 = 3
5~8 = 4
2~7 = 6
1~6 = 6
for문은 19번입니다.
아래와 같이 했을때 더 효율이 좋습니다.
데이터가 얼만큼 들어올지 확실하지 않아서 질문드려봅니다. 알고가는게 좋을것 같아서요;;
---------
아래는 질문 요약입니다.;
foreach문을 사용 했을때 값을 내림차순으로 받을수 있는지 궁금합니다.
굳이 foreach문이 아니더라도 다른방법으로 처리할수 있는지 궁금합니다.