2009-12-04 2 views
0

IComparable을 구현하여 숫자 및 숫자가 아닌 문자열을 정렬하는 방법.IComparable을 구현하여 숫자 및 숫자가 아닌 문자열을 정렬하는 방법

첫째, 나는 "목록"에서 최소값과 최대 값을 얻고 싶습니다.

ICompareable을 구현하도록 요청하고 있습니다. "하나 이상의 개체가 IComparable을 구현해야합니다."

아무도 도와 줄 수 있습니까? 당신은 전화를 할 수 있도록 최소() 및 최대() 요소를 얻기 위해 노력하고

<Products> 
    <ProductName>9954</ProductName> 
    <ProductName>987</ProductName> 
    <ProductName>197</ProductName> 
    <ProductName>56</ProductName> 
    <ProductName>rr45</ProductName> 
    <ProductName>ad4</ProductName> 
    <ProductName>7</ProductName> 
    <ProductName>69dd</ProductName> 
    <ProductName>69</ProductName> 
    <ProductName>197abc</ProductName> 
</Products> 

답변

1

:

 // setup 
     string filePath1 = Directory.GetCurrentDirectory().ToLower().Replace(@"\bin\debug", string.Empty) 
      + @"\SampleData\products.xml"; 

     // load XML 
     var xdoc1 = XElement.Load(filePath1); 


     //list 
     var elements = xdoc1.Descendants("ProductName").OrderBy(x => x.Value); 

     //output 
     Console.WriteLine("Min- " + elements.Min().Value); 
     Console.WriteLine("Max- " + elements.Max().Value); 
여기

내 XML 파일입니다 : 여기 내 코드입니다 Min()을 사용하면 XElement가 IComparable을 구현해야합니다. 그렇지 않기 때문에 Element 컬렉션에서 Min을 직접 호출 할 수는 없습니다.

값으로 요소를 정렬하고 처음부터 끝까지 가져 가려고하지 않는 이유는 무엇입니까?

var ordered = elements.OrderBy(e => e.Value).ToList(); 
var min = ordered.First().Value; 
var max = ordered.Last().Value; 
+0

감사합니다 당신의 도움을 위해,하지만 난 elements.OrderBy (예 => e.Value) 30 ℃와 pH 5.5 또는 다른 pH와 함께이 작업을 수행하는 방법을 알고 싶어 :

얀의 솔루션은보다 효율적이며, 작동합니다 . IComparable 인터페이스를 구현하는 방법을 알고 계십니까? 감사합니다. Yann. –

+0

요소는 IComparable을 구현하지 않으므로 Min은 IComparable을 기대할 수 없습니다. –

+0

또는 요소를 수행 할 수 있습니다. 오더 비 (e => e.Value). 선택 (e => e.Value) .Min()하지만 요소 만 가져 오지 않고 값만 가져옵니다. –

0

당신이 최소 및 최대 XElement 객체를 요구하고 프레임 워크가 IComparable를 구현하지 않는 XElement의 비교하는 방법을 알고하지 않기 때문에 그것은이다. var elements은 실제로 IEnumerable<XElement> elements으로 평가됩니다.

또한 코드를 처음 정렬 할 때 매우 효율적이지는 않습니다. 목록을 두 번 더 (한 번은 Min, 한 번은 Max) 반복합니다.) (

var ordered = elements.OrderBy(e => e.Value).ToList();  
var min = ordered.First().Value;  
var max = ordered.Last().Value; 
+0

감사합니다. Lain, 고맙습니다. 호호 ... –

관련 문제