Python sorted()函数并返回多个值

时间:2012-11-11 16:03:23

标签: c# python porting

我正在尝试将Python程序转换为C#。我不明白这里做了什么。

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()函数使用的多个参数? sort()函数如何使用这些多个值?

key=operator.itemgetter(1)做了什么?这是排序的基础,所以在这种情况下,cost的多值返回,它将使用c的值吗?

有没有办法在C#中执行此操作?

1 个答案:

答案 0 :(得分:0)

使用sorted有点奇怪。您可以通过简单的if语句轻松替换它。甚至更奇怪的是,cost仅返回c作为返回元组的第二个值。在mincost中,cost永远不会调用值c而非默认值,因此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
}

(未测试的)