2012-11-11 3 views
0

파이썬 프로그램을 C#으로 변환하려고합니다. 나는 여기서 무슨 일이 일어나고 있는지 이해하지 못한다.Python sorted() 함수가 여러 값을 반환하는 중

def mincost(alg): 
    parts = alg.split(' ') 
    return sorted([cost(0, parts, 'G0 '),cost(1, parts, 'G1 ')], key=operator.itemgetter(1))[0] 

def cost(grip, alg, p = '', c = 0.0, rh = True): 
    if (len(alg) == 0): 
     return (postProcess(p),c) 

postprocess 문자열을 정렬() 함수를 사용

cost 반환 여러 매개 변수를 반환? sorted() 함수는 이러한 다중 값을 어떻게 사용합니까?

무엇이 key=operator.itemgetter(1)입니까? 이것이 정렬의 기초입니까?이 경우 다중 값 반환 costc의 값을 사용합니까?

C#에서이 작업을 수행 할 수있는 방법이 있습니까?

+1

참조 [정렬 미니 HOW TO] (http://wiki.python.org/moin/ :

그럼에도 불구하고, 당신은 다음과 같은 기능을 구현할 수 HowTo/Sorting /) – Abhijit

+0

@Abhijit, 예 감사합니다. 나는 RTFM을해야했다 –

+2

나는 그 코드를 정확히 복제하고 싶지 않다. 하지만 기본적으로 itemgetter는 여기에서 정렬 키로 사용되는 목록에서 두 번째 항목 (항목 1)을 가져옵니다. 따라서 목록에서 두 번째 항목을 정렬합니다. – Keith

답변

0

sorted의 사용은 조금 이상합니다. 간단한 if 문으로 쉽게 대체 할 수 있습니다. 심지어 더 이상하더라도 cost은 반환 튜플의 두 번째 값으로 단지 c을 반환합니다. mincost에서 은 기본값이 아닌 c 값으로 호출되지 않으므로 은 항상 0.0이므로 정렬이 매우 중복됩니다. 하지만 비용 기능에 대해 빠진 부분이 있다고 생각합니다.

(안된)
string MinCost (string alg) { 
    List<string> parts = alg.split(" "); 
    Tuple<string, double> cost1 = Cost(0, parts, "G0 "); 
    Tuple<string, double> cost2 = Cost(1, parts, "G1 "); 

    if (cost1[1] < cost2[1]) 
     return cost1[0]; 
    else 
     return cost2[0]; 
} 

Tuple<string, double> Cost (int grip, List<string> alg, string p="", double c=0.0, bool rh=True) { 
    if (alg.Count == 0) 
     return new Tuple<string, double>(PostProcess(p), c); 

    // ... there should be more here 
} 

+0

@poke 감사합니다. 실제로 코드의 일부를 제거했습니다. ''분류 된''에 대해서는''비용''에 대한 호출이 많았고''비용''아래에는 더 많은 코드가있었습니다. –

+0

아, 그러면 더 이해가됩니다 :) – poke

관련 문제