3

Java で効率的にプログラミングする方法を学び、それが Python だと考えるのをやめるべきであることはわかっています。しかし問題は、この種のことが Java では小さな悪夢であることが判明していることです。

Python には、文字列を引数として受け取る次の関数があります。

def decodeL(input):
L = []
for i in range(len(input)):
    for j in x.items(): // Where "x" is the Dictionary outside the function.
        if input[i].lower() in j[0]:
            L.append(j[1])
return L

関数自体の機能を無視して、それを非常にうまく機能させるのは、リスト内のタプルを返す「items()」メソッドです。ご覧のとおり、これらのタプルを独自のインデックスにアクセスして遊んでいます。

Java では、これは非常に不快な問題です。

static ArrayList items(HashMap hashTarget) {
    ArrayList L = new ArrayList();
    Set<String> keys = hashTarget.keySet();
    Collection<Object> values = hashTarget.values();

    for (int i = 0; i < hashTarget.size(); i++) {
        L.add(keys);
        L.add(values);
    }

    return L;
}

ご覧のとおり、私は独自の「items()」メソッドを実装しようとしましたが、惨めに失敗しました。Javaにはネイティブにタプルがないので、これは本当に私の脳を台無しにしています:)。Python が美しく行うのと同じ方法でキーと値を挿入することはできません。したがって、私の最終目標である「decodeL」関数の Java バージョンを作成することはできません。

それだけです。あなたたちのための別のランダムな「挑戦」。

4

1 に答える 1

4

Java は、メソッドのMap.entrySet()方法で既にこれを実装しています。

for(Map.Entry<K, V> j : x.entrySet()) {
    V val = j.getValue(); // j[1]
    K key = j.getKey();   // j[0]
}
于 2013-05-02T22:34:36.210 に答える