web-dev-qa-db-fra.com

Comment obtenir des valeurs uniques d'un tableau

J'ai un tableau à partir duquel je veux supprimer les éléments en double.

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);

Mais cela ne me donne pas des valeurs uniques de Array.

My Array: - {Sous-titres anglais, français, japonais, russe, chinois, Anglais, français, japonais, russe, sous-titres chinois}

Out Put: - [Sous-titres japonais, russe, français, chinois], sous-titres chinois, [anglais, anglais]

12
Code Hungry

Vous pouvez le faire en une ligne dans Java 7:

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

et plus court et plus simple en Java 8:

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

HashSet fera le travail.

Vous pouvez essayer ceci:

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

À l’aide de l’API Stream de Java 8, il s’agit d’une solution de type Array générique:

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);
        }

    });
}

Cela fonctionne pour n'importe quel tableau de type Object, mais pas pour les tableaux primitifs.

Pour les tableaux primitifs, cela ressemble à ceci:

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

Et enfin voici un petit test unitaire:

@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 }));
}
1

Essayez au lieu de cela

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

appeler cela

set.addAll(trimmedArray);
0
Nikolay Kuznetsov

En python, vous pouvez utiliser Set. 

s = Set()
data_list = [1,2,3,4]
s.update(data_list)
0
Nishu

Voyons comment trouver des valeurs distinctes d'un tableau. 

  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]+" ");
                    }
               }
           }
     }
0

Pourquoi avez-vous d'abord ajouté des éléments dans un tableau, puis converti-le en chaîne? Il suffit de parcourir le tableau et de les copier dans Set.

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);
}
0
Parvin Gasimzade

Ce code calculera des éléments distincts d'un tableau, puis trouvera leur occurrence. Et calcule le pourcentage et enregistrez-le dans 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);
0
qasim azam

Si vous ne voulez pas utiliser Hashset ou la nouvelle méthode Java8 mentionnée ci-dessus, vous pouvez écrire ce code dont vous avez besoin en premier lieu pour trier le tableau. Des valeurs similaires seront ensuite côte à côte, puis compter le nombre de paires distinctes dans les cellules adjacentes .

    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;
}
0
Mustafa Shahoud

Vous pouvez obtenir deux jeux, l’un avec tous les sous-titres et l’autre avec les doublons.

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);
}
0
Oscar Castiblanco