简体   繁体   English

如何从数组中获取唯一值

[英]How to get unique values from array

I have an Array from which i want to remove Duplicate items. 我有一个数组,我想从中删除重复项。

for(int data1=startpos;data1<=lastrow;data1++) {
    String movie_soundtrk=cells.getCell(data1,Mmovie_sndtrk_cl).getValue().toString();
    al.add(movie_soundtrk);
}

String commaSeparated=al.toString();
String [] items = commaSeparated.split(",");
String[] trimmedArray = new String[items.length];
for (int i = 0; i < items.length; i++) {
    trimmedArray[i] = items[i].trim();
}

Set<String> set = new HashSet<String>();
Collections.addAll(set, trimmedArray);

System.out.println(set);

But this is not giving me unique Values from Array. 但这并没有给我Array的独特价值。

My Array:- {English, French, Japanese, Russian, Chinese Subtitles,English, French, Japanese, Russian, Chinese Subtitles} 我的阵列: - {英文,法文,日文,俄文,中文字幕,英文,法文,日文,俄文,中文字幕}

Out Put :- [Japanese, Russian, French, Chinese Subtitles], Chinese Subtitles, [English, English] 输出: - [日语,俄语,法语,中文字幕],中文字幕,[英语,英语]

You can do it in one line in java 7: 你可以在java 7中的一行中完成它:

String[] unique = new HashSet<String>(Arrays.asList(array)).toArray(new String[0]);

and shorter and simpler in java 8: 在Java 8中更简单,更简单:

String[] unique = Arrays.stream(array).distinct().toArray(String[]::new);

HashSet will do the job. HashSet将完成这项工作。

You can try this: 你可以试试这个:

List<String> newList = new ArrayList<String>(new HashSet<String>(oldList));

Using the Stream API of Java 8 this is a solution with a generic Array type: 使用Java 8的Stream API,这是一个具有通用Array类型的解决方案:

public static <T> T[] makeUnique(T... values)
{
    return Arrays.stream(values).distinct().toArray(new IntFunction<T[]>()
    {

        @Override
        public T[] apply(int length)
        {
            return (T[]) Array.newInstance(values.getClass().getComponentType(), length);
        }

    });
}

It works for any Object type array, but not for primitive arrays. 它适用于任何Object类型数组,但不适用于原始数组。

For primitive arrays it looks like this: 对于原始数组,它看起来像这样:

public static int[] makeUnique(int... values)
{
    return Arrays.stream(values).distinct().toArray();
}

And finally here is a little unit test: 最后这是一个小单元测试:

@Test
public void testMakeUnique()
{
    assertArrayEquals(new String[] { "a", "b", "c" }, makeUnique("a", "b", "c", "b", "a"));
    assertArrayEquals(new Object[] { "a", "b", "c" }, makeUnique(new Object[] { "a", "b", "c", "b", "a" }));
    assertArrayEquals(new Integer[] { 1, 2, 3, 4, 5 }, makeUnique(new Integer[] { 1, 2, 2, 3, 3, 3, 1, 4, 5, 5, 5, 1 }));
    assertArrayEquals(new int[] { 1, 2, 3, 4, 5 }, makeUnique(new int[] { 1, 2, 2, 3, 3, 3, 1, 4, 5, 5, 5, 1 }));
}

You could get two sets, one with all the subtitles, and the other with the duplicates 您可以获得两组,一组包含所有字幕,另一组包含副本

String[] trimmedArray = new String[items.length];
Set<String> subtitles = new HashSet<String>();
Set<String> duplicatedSubtitles = new HashSet<String>();

foreach(String subtitle : trimmedArray){
    subtitle = subtitle.trim();
    if(subtitles.contains(subtitle)){
        duplicatedSubtitles.add(subtitle);
    }
    subtitles.add(subtitle);
}

Try instead of this 尝试而不是这个

Set<String> set = new HashSet<String>();

to call this 打电话给这个

set.addAll(trimmedArray);

Why did you first add items into array and then convert it to string? 为什么首先将项添加到数组中然后将其转换为字符串? Just iterate over tha array and copy them to Set.Then print new created set which holds unique values. 只需遍历tha数组并将它们复制到Set.Then打印包含唯一值的新创建集。

Set<String> set = new HashSet<String>();
for (int i = 0; i < al.length; i++) {
    set.add(al[i]);
}

for (String str : set) {
    System.out.println(str);
}

This code will calculates distinct elements from an array, then finds their occurrence. 此代码将计算数组中的不同元素,然后查找它们的出现。 And calculates percentage and save it to hashmap. 并计算百分比并将其保存到hashmap。

int _occurrence = 0;
        String[] _fruits = new String[] {"apple","apple","banana","mango","orange","orange","mango","mango","banana","banana","banana","banana","banana"};
        List<String> _initialList = Arrays.asList(_fruits);
        Set<String> treesetList = new TreeSet<String>(_initialList);
        String[] _distinct =  (String[]) treesetList.toArray(new String[0]);

        HashMap<String,String> _map = new HashMap<String,String>();
        int _totalElement = _fruits.length;
        for(int x=0;x<_distinct.length;x++){
            for(int i=0;i<_fruits.length;i++){
                if(_distinct[x].equals(_fruits[i])){
                    ++_occurrence;
                }
            }
            double _calPercentage = Math.round((((double)_occurrence/(double)_totalElement)*100));
            _map.put(_distinct[x], String.valueOf(_calPercentage+"%"));
            _occurrence = 0;
        }
        System.out.println(_map);

Let's see how to find distinct values from an array. 让我们看看如何从数组中找到不同的值。

  public class Distinct  {
        public static void main(String args[]) {
             int num[]={1,4,3,2,6,7,4,2,1,2,8,6,7};
                for(int i=0; i<num.length; i++){
                    boolean isdistinct = true;
                    for(int j=0; j<i; j++){
                        if(num[i] == num[j]){
                            isdistinct =false;
                            break;
                        }
                   }
                    if(isdistinct){
                        System.out.print(num[i]+" ");
                    }
               }
           }
     }

If you don't wanna use Hashset or the new method in Java8 mentioned above you can write this code you just need first to sort the array so similar values will then be next to each other and then count the number of distinct pairs in adjacent cells. 如果您不想在上面提到的Java8中使用Hashset或新方法,您可以编写此代码,首先需要对数组进行排序,以便相似的值将彼此相邻,然后计算相邻单元格中不同对的数量。

    public static int solution(int[] A) {
    int count = 1;
    Arrays.sort(A);
    for (int i = 1; i < A.length - 1; i++) {
        if (A[i] != A[i + 1]) {
            count++;
        }
    }
    return count;
}

In python you can use Set. 在python中,您可以使用Set。

s = Set()
data_list = [1,2,3,4]
s.update(data_list)
int arr[] = {1,1,2,2,3,3,4,5,5,6}; 
for(int i=0; i<arr.length; i++) {
int count = 0;
    for(int j=0; j<arr.length; j++) {
        if ((arr[i] == arr[j]) && (i!=j)) {
            count++ ;
        }
    }
        if(count==0) {
            System.out.println(arr[i]);
        }
}
public static int[] findAndReturnUniqueIntArray(int[] arr) {
    int[] distinctElements = {};
    int newArrLength = distinctElements.length;
    for (int i = 0; i < arr.length; i++) {
        boolean exists = false;
        if (distinctElements.length == 0) {
            distinctElements = new int[1];
            distinctElements[newArrLength] = arr[i];
            newArrLength++;
        }

        else {
            for (int j = 0; j < distinctElements.length; j++) {
                if (arr[i] == distinctElements[j]) {
                    exists = true;
                    break;
                }
            }
            if (exists == false) {
                distinctElements = Arrays.copyOf(distinctElements, distinctElements.length+1);
                distinctElements[distinctElements.length-1] = arr[i];
                newArrLength++;
                exists = false;
            }
        }
    }
    return distinctElements;
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM