【问题标题】:print unique values from array从数组中打印唯一值
【发布时间】:2015-10-01 17:02:46
【问题描述】:

我需要获取第一个数组索引的唯一值,这就是我尝试的方法。

public class Array {

    public static void main(String[] args) {

        int[][] array = { 
                  {100, 12 , 0, 3},
                  {100, 177, 0, 3},
                  {100, 233, 0, 3}, 
                  {100, 144242, 0, 3},
                  {100, 14, 0, 4},  
                  {100, 12234, 0, 4},
                  {100, 134, 1, 4},
                  {2, 15, 0, 3},
                  {23, 1533, 0, 3},
                  {23, 1322, 1, 4}, 
                  {23, 13, 1, 4}, 
                  {23, 122, 1, 4},
                  {1321, 142, 1, 4},
                  {1321, 133,1, 4},
                  {3, 16, 0, 5},
                  {55, 1003, 0,3},
                  {553, 1002, 2, 6},
                  {31, 162, 0, 5},
                  {7, 1626, 0, 5},
                  {7, 2336, 0,5}           
                 };




        boolean isUnique = true;

        for(int i=0; i<= array.length; i++)
        {
             for (int j = 0; j < 1; j++)
             {
                 if (array[j]==array[j])
                 {                       

                     int riid = array[i][j];    

                     Set<Integer> uniqueNumbers = new HashSet<Integer>(Arrays.asList(riid));

                     System.out.println(riid);
                 }               
             }
         }
    }
}

我的输出必须是 100、2、23、1321、3、55、553、31 和 7。 但是,它并没有给我独特的价值。它打印 100 100 100 100 100 100 100 2 23 23 23 23 1321 1321 3 55 553 31 7 7

我怎样才能得到这个输出的唯一值。我认为Set&lt;Integer&gt; uniqueNumbers = new HashSet&lt;Integer&gt;(Arrays.asList(riid)); 会有所帮助。但是,它没有。

【问题讨论】:

    标签: java arrays unique-values


    【解决方案1】:

    你只需要写:

        Set<Integer> uniqueNumbers = new LinkedHashSet<Integer>();
        for (int i = 0; i < array.length; i++) {
            uniqueNumbers.add(array[i][0]);
        }
        System.out.println(uniqueNumbers);
    

    【讨论】:

    • LinkedHashSet 将保留插入顺序 afaik,因此这是迄今为止使用集合并按预期工作的唯一答案:p
    • @Łukasz 实际上,如果您仔细阅读问题,OP 不需要Set。只是因为OP没有找到解决方案,OP只需要打印...
    【解决方案2】:

    你的代码有很多问题:

    • i &lt;= array.length - Java 中的数组从零开始
    • 您的内部循环从 0 运行到 1,您究竟想在这里实现什么?
    • 您在每次迭代时都覆盖了集合,这并不是您想要的

    您的问题有很多可能的解决方案,其中之一是将二维数组展平(使用 Java 8 非常简单),然后将其转换为 Set

    int[] myArr = Arrays.stream(array)
                .flatMapToInt(Arrays::stream)
                .toArray();
    
    Set<Integer> mySet = new HashSet<>(Arrays.asList(myArr));
    

    【讨论】:

      【解决方案3】:

      这很简单,创建一个 ArrayList 并检查它是否包含每个数组的第一个元素,然后不要将此元素添加到 ArrayList,如果不包含将其添加到 ArrayList

       ArrayList<Integer> list = new ArrayList<>();
            for(int i = 0 ; i < array.length ;i++ ){
                    if(!list.contains(array[i][0])){
                        list.add(array[i][0]);
                    }
            }
      

      here 是工作示例

      【讨论】:

        【解决方案4】:

        此条件比较相同的值,因此将始终为真:

        if (array[j]==array[j])
        //        ↑         ↑
        

        据我了解,您只需要检查第一个位置:

        int lastRiid = 0;
        
        for (int i = 0; i < array.length; i++) {
            if (array[i][0] != lastRiid) {
                lastRiid = array[i][0];
                System.out.println(lastRiid);
            }
        }
        

        输出:

        100
        2
        23
        1321
        3
        55
        553
        31
        7
        

        【讨论】:

        • 嗨@Manuli 很高兴听到这个消息。如果此答案或任何答案解决了您的问题,请单击复选标记考虑accepting it。这向更广泛的社区表明您已经找到了解决方案,并为回答者和您自己提供了一些声誉。没有义务这样做。
        • 您能帮我打印具有相似第 0 索引的第 1 索引列表吗? ex - 100 - 12,177,233,144242, 14, 12234, 134
        • 试过了。但它只打印第一个值。 :( 这就是我得到的。100-12 2-15 23-1533 1321-142 3-16 55-1003 553-1002 31-162 7-1626
        • 我应该知道你在哪里卡住了......并且无法在 cmets 中添加这么多代码,请发布另一个问题并将链接粘贴到此处,我会的看看...
        • Jordi Castilla,这是问题所在。 stackoverflow.com/questions/32885907/…
        猜你喜欢
        • 1970-01-01
        • 2020-10-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-07-14
        • 1970-01-01
        • 1970-01-01
        • 2010-10-01
        相关资源
        最近更新 更多