0

我发现一些 python 代码 io 试图带入 java,但我不知道如何翻译:

for (prev_sum, subset) in old_subsets.iteritems():

我会做两个语句,首先迭代键值,然后获取集合?我的“翻译”是否涵盖了原意?

   //     def subset_summing_to_zero (activities):
    //        subsets = {0: []}
    //        for (activity, cost) in activities.iteritems():
    //            old_subsets = subsets
    //            subsets = {}
    //            for (prev_sum, subset) in old_subsets.iteritems():
    //                subsets[prev_sum] = subset
    //                new_sum = prev_sum + cost
    //                new_subset = subset + [activity]
    //                if 0 == new_sum:
    //                    new_subset.sort()
    //                    return new_subset
    //                else:
    //                    subsets[new_sum] = new_subset
    //        return []

  public Set<Integer> subset_summing_to_zero (Set<Integer> startvalues){
    Hashtable<Integer,Set<Integer>> subsets = new Hashtable<Integer,Set<Integer>>();
    subsets.put(0,new TreeSet<Integer>());
    for (Integer cost:startvalues){
        Hashtable<Integer,Set<Integer>> old_subsets = new Hashtable<Integer,Set<Integer>>(subsets);
        subsets.clear();
        for (Integer prev_sum:old_subsets.keySet()){
            Set<Integer> subset=subsets.get(prev_sum);
            subsets.put(prev_sum, subset);
            Integer new_sum = prev_sum+cost;
            Set<Integer> new_subset=new TreeSet<Integer>(subset); // need two steps 
            new_subset.add(cost);
            if (new_sum==0)
                    return new_subset;
            else
                subsets.put(new_sum,new_subset);            
        }
    }
    return null;

}
4

3 回答 3

1

我发现一些 python 代码 io 试图带入 java,但我不知道如何翻译:

for (prev_sum, subset) in old_subsets.iteritems():

这是对字典中条目的循环。该Map.Entry<K, V>接口封装了一个键及其对应的值,就像在 Python 中使用一对一样。

Set<Map.Entry<K, V>> entrySet()方法Map<K, V>允许您迭代条目,因此:

for (Map.Entry<Integer, Set<Integer>> e : oldSubsets.entrySet()) {
   Integer prevSum = e.getKey();
   Set<Integer> subset = e.getValue();
   ...
}
于 2013-09-18T22:43:38.597 回答
0

以下python位:

for (prev_sum, subset) in old_subsets.iteritems():

只是一个 for 循环,每次迭代都有一个元组作为项目。以下教程涵盖了这一点: http: //anh.cs.luc.edu/python/hands-on/3.1/handsonHtml/loopsandtuples.html

于 2013-09-18T22:31:44.367 回答
0

请查看此处以找到 Java 的 Tuple 接口。

一般来说,当你想翻译一段代码时,你应该完全理解你正在翻译的代码,理解算法,然后用另一种语言实现它。结果代码是否包含相同的类或看起来相似并不重要。重要的是它应该与初始代码等效,这意味着在所有情况下,相同输入的结果都是相等的。

于 2013-09-18T23:07:05.413 回答