对具有 3 列的表进行排序

ave4496

我有一个元素列表,并希望显示如下列表:

ADG
BEH
CFI

(表格从左上角到右下角填满)

如果我从列表中删除“I”,我的代码就可以工作……但显然我想让它适用于每种情况:

    List<String> beanz = Arrays.asList("A", "B", "C", "D", "E", "F", "G", "H", "I");
    String[] sortedBeanz = new String[beanz.size()];

    int i = 0;
    while (i < beanz.size()) {

        int shift = (i * 3) / beanz.size();
        int pos = ((i * 3) - beanz.size() * shift);

        System.out.println(pos + " " + beanz.get(i));
        sortedBeanz[pos] = beanz.get(i);
        i++;
    }

我被卡住了,无法弄清楚我做错了什么

吉尔费尔南德斯

这是一个简单但可扩展的解决方案,它将根据输入的大小创建排序的字符立方体。它将根据输入的大小生成具有 3 x 3 或 4 x 4 等字符的立方体。

这是一个弹性解决方案:

public static void sortSizeable(List<String> beanz) {
    Collections.sort(beanz);
    int cols = (int) Math.ceil(Math.sqrt(beanz.size()));
    String[][] sortedBeanz = new String[cols][cols];
    for (int i = 0; i < beanz.size(); i++) {
        int row = i / cols;
        int col = i % cols;
        sortedBeanz[col][row] = beanz.get(i);
    }
    System.out.println(Arrays.stream(sortedBeanz)
            .map(array -> Arrays.stream(array).collect(StringBuilder::new, (sb, s) -> sb.append(s == null ? "=" : s).append(" "), (sb, s) -> {} ))
            .collect(Collectors.joining("\r\n")));
}

下面是一个带有相应输出的测试用例:

public static void main(String[] args) throws IOException {
    sortSizeable(Arrays.asList("A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P"));
    System.out.println();
    sortSizeable(Arrays.asList("A", "B", "C", "D", "E", "F", "G", "H"));
    System.out.println();
    sortSizeable(Arrays.asList("A", "B", "C", "D"));
    System.out.println();
    sortSizeable(Arrays.asList("A", "B", "C", "D", "E", "F", "G", "H", "I"));
    System.out.println();
    sortSizeable(Arrays.asList("A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R"));
}

这将打印出以下立方体或排序字符:

A E I M 
B F J N 
C G K O 
D H L P 

A D G 
B E H 
C F = 

A C 
B D 

A D G 
B E H 
C F I 

A F K P = 
B G L Q = 
C H M R = 
D I N = = 
E J O = = 

更新

如果您只需要 3 行的弹性解决方案,这里是解决方案:

public static void sortSizeable2(List<String> beanz) {
    Collections.sort(beanz);
    final int cols = 3; // Number of columns
    int rows = (int) Math.ceil(beanz.size() / (cols * 1.0));
    String[][] sortedBeanz = new String[rows][cols];
    for (int i = 0; i < beanz.size(); i++) {
        int row = i / rows;
        int col = i % rows;
        sortedBeanz[col][row] = beanz.get(i);
    }
    printOut(sortedBeanz);
}

如果您在此代码上运行此测试:

public static void main(String[] args) throws IOException {
    sortSizeable2(Arrays.asList("A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P"));
    System.out.println();
    sortSizeable2(Arrays.asList("A", "B", "C", "D", "E", "F", "G", "H"));
    System.out.println();
    sortSizeable2(Arrays.asList("A", "B", "C", "D"));
    System.out.println();
    sortSizeable2(Arrays.asList("A", "B", "C", "D", "E", "F", "G", "H", "I"));
    System.out.println();
    sortSizeable2(Arrays.asList("A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R"));
}

你会看到这个:

A G M 
B H N 
C I O 
D J P 
E K = 
F L = 

A D G 
B E H 
C F = 

A C = 
B D = 

A D G 
B E H 
C F I 

A G M 
B H N 
C I O 
D J P 
E K Q 
F L R

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

SQL Server:对具有 XML 列的不同表进行排序

对没有列'id'的表进行排序

如何获得具有3列的表,而第三列仅具有1 <td> 100%

使用1个具有3个外键的联结表还是2个具有共享排序的联结表?

Java Bubble对具有3个元素的反向排序数组进行排序。

在Python 3中按键对具有不同类型的字典排序列表进行排序

如何对具有软件版本号的表中的列进行排序?

如何对仅在数据表中具有数字的列进行排序?

使用javascript按具有高,中,低值的列对html表进行排序

对于具有 8 个日期列的表,如何按每行的最大日期对行进行排序?

MySQL:1 个具有 3 个列的关系表或 3 个具有 2 列的关系表?

具有3个表的FOR XML PATH

具有3个表的SQL查询

具有 3 列的 div 结构

具有 3 列的响应式 Div

具有获取数组的Bootstrap 3列

通过单击具有数字和字符串值的列的表标题对React表进行排序

如何对具有非字母值的表进行排序?

对具有字母数字值的字符串数组进行排序(Python3)

如何对没有“ transition()”调用的D3生成的HTML表进行排序?

JqGrid:对具有混合控件的列进行排序;标签并选择

在R中对具有可变列数的矩阵进行排序

在熊猫中对具有列表的列进行排序

根据列值对具有MultiIndex的pandas DataFrame进行排序

对具有相应行的Python列进行排序

如何对具有特定列的特定行集进行排序?

来自3个表的信息,其中只有2个具有匹配的列

使用Python3 / sqlite3创建具有未知列数的表

具有未排序列表的CSS3