2012-01-18 3 views
0

방금 ​​일부 C# 코드에서 ArrayList를 사용하기 시작했으며 정렬 할 때 몇 가지 문제가 있습니다.정렬 기능 후 ArrayList 변경

public static object GetMinValue(ArrayList arrList) 
{ 
ArrayList sortArrayList = arrList; 
sortArrayList.Sort(); 
return sortArrayList[0]; 
} 
: 함수를 사용하여

cutList.Add("2200","1800","1200","1"); 
int minList = (int)GetMinValue(cutList); 

: 최소를 찾을 수

ArrayList cutList = new ArrayList; 

을 그리고 내가 설정하고 배열 목록을 정렬 :

먼저 내 클래스에서 ArrayList에 객체를 생성, 정의

나중에 인덱스 cutList [2]를 찾으려고합니다.이 함수는 또한 c를 정렬했기 때문에 "1200"을 찾습니다. utList. 과거에 같은 문제가있었습니다. 변수를 응용 프로그램 설정으로 설정 한 다음 변수를 수정할 때 응용 프로그램 설정이 변경됩니다. 이 문제를 올바르게 해결하는 방법. 나는 혼자서 C#을 배웠고 약간의 주위를 건너 뛰는 것에 유죄이다. 내가 놓친 대상에 대한 교훈이 있습니까?

+0

"참조 유형"에 대한 Google –

답변

0

코드의 문제는 ArrayList sortArrayList = arrList;arrList에서 sortArrayList으로 복사되지 않는다는 것입니다. 할당하면 기존 개체의 새 별칭이 만들어집니다. 당신의 코드가 작동하려면, 나 또한 다소 오래된 컨테이너를이 아마 목록에 최소 요소를 찾는 가장 비효율적 인 방법이라고 추가해야

ArrayList sortArrayList = (ArrayList)arrList.Clone(); 

를 사용합니다. ArrayList 대신 List<string>을 사용하고 LINQ의 Min() 함수를 사용하여 최소 요소를 얻는 것이 좋습니다.

+0

나는 더 많은 연구를 수행했으며 "참조로 전달"에 대해 논의하는 자료를 발견했습니다. 그렇다면 clone() 함수는 cutList 또는 arrList가 변경 될 때 변경되는 동일한 메모리 "참조"를 가리키는 대신 자체 메모리 위치를 만들 수 있습니까? ArrayList를 사용하는 이유는 ArrayList에 대해 더 많은 것을 배울 수 있기 때문입니다. 내 교훈과 같아서 최소/최대 검색을 위해 정렬을 사용해서는 안됩니다 ..... –

+0

'Clone()'은 원본과 별개의 복사본을 만듭니다. 복사본을 정렬하거나, 요소를 추가하거나, 지울 수 있습니다. 원본에는 아무 것도 일어나지 않습니다. 당연히 원본에 대한 변경 사항도 사본에 반영되지 않습니다. – dasblinkenlight