基本上我有编写两个方法的任务:一个zip方法,将包含两个泛型异议列表的通用元组转换为由上述列表的元素组成的元组列表,以及一个执行相同操作的解压缩方法在另一个方向。即:
({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;
所以这是我的问题:我不知道如何将第二层的元素放下来。例如,通常,我只是这样做 -
public static<A, B extends List> List unzip(Tuple<A, B> ListenTuple){
List TupelnListe = new List(new Tuple(ListenTuple.a.head, ListenTuple.b.head));
- 得到我需要的元素,两层向下。不幸的是,因为Tuple是通用的,它不知道ListenTuple.a必须是List,因此有一个头。类似的问题出现在zip中,从元组中获取a和b。哦,我不允许因某些愚蠢的任意原因而进行类型转换,虽然我不确定这对我有什么帮助。
...基本上,任何人都可以给我一个如何开始这个指针的指针吗?他们本周基本上把我们扔进了课堂上的仿制品,没有人得到它。任何援助将不胜感激。
答案 0 :(得分:1)
这会有用吗?
public static<A, B> List zip(Tuple<List<A>, List<B>> ListenTuple){
因此A和B是列表的元素,a,b现在是列表。
我对C ++比较熟悉,所以我不确定这些差异是否会以某种方式阻止它。
答案 1 :(得分: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);
看看你是否可以从中找到它