0

基本的に、私は 2 つのメソッドを作成するタスクを持っています。1 つは、一般的な異議の 2 つのリストを含む一般的なタプルを、前述のリストの要素で構成されるタプルのリストに変換する zip メソッドと、もう 1 つのメソッドで同じことを行う unzip メソッドです。方向。すなわち:

({1, "banana", true}{asgard, 5.21e, "stupidhomework"})
=> unzip
{(1, asgard)("banana",5.21e)(true,"stupidhomework")}
=> zip
({1, "banana", true}{asgard, 5.21e, "stupidhomework"})

これをさらに複雑にしています:リストは、構造を持つ単純にリンクされた不変のジェネリックリストです

List<T>
public final T       head;
public final List<T> tail;

...そして、タプルも同様に一般的です。タプルの両方の要素は文字通り何でもかまいません:

public class Tuple<A, B> {
public final A a;
public final B b;

だからここに私の問題があります.2番目のレイヤーの下の要素を取得する方法がわかりません. たとえば、通常、私はこれを行うだけです-

   public static<A, B extends List> List unzip(Tuple<A, B> ListenTuple){
        List TupelnListe = new List(new Tuple(ListenTuple.a.head, ListenTuple.b.head));

-必要な要素を取得するには、2 つのレイヤーを下にします。残念ながら、Tuple はジェネリックであるため、ListenTuple.a が List でなければならないことを認識していないため、head があります。タプルから a と b を取得すると、同様の問題が zip で発生します。ああ、それがどのように役立つかはわかりませんが、ばかげた恣意的な理由でタイプキャストすることは許可されていません。

...基本的に、これを開始する方法を誰か教えてもらえますか? 彼らは基本的に今週のクラスで私たちをジェネリックに投げ込みましたが、誰もそれを理解していません. どんな援助でも大歓迎です。

4

2 に答える 2

1

私はこれらの署名をお勧めします:

public static <A, B> List<Tuple<A, B>> zip(Tuple<List<A>, List<B>> x);
public static <A, B> Tuple<List<A>, List<B>> unzip(List<Tuple<A, B>> x);

あなたがそこからそれを理解できるかどうか見てください

于 2013-01-11T03:47:48.730 に答える
1

これは機能しますか?

public static<A, B> List zip(Tuple<List<A>, List<B>> ListenTuple){

A と B はリストの要素であり、a、b はリストです。

私はC++に精通しているので、違いがこれを何らかの形で妨げているかどうかはわかりません.

于 2013-01-11T01:29:02.387 に答える