Eliminar la matriz de entradas de otra matriz -- indexing camp askubuntu Relacionados El problema

Remove array of entries from another array


4
vote

problema

Español

Tengo 2 matrices

      a=(1,2,3,4,5)     b=(2,4)   

La salida debe ser

      c=(1,3,5)    

(que debe ser el resultado de A-B)

He intentado usar

  ABCDEFGHIJKLMNABCDEFGHIJKLMN5   

¿Alguna idea?

Lo que tengo trabajo ahora es un bucle que ejecuta a través de 700,000 iteraciones

Original en ingles

I've got 2 arrays

    a=(1,2,3,4,5)     b=(2,4) 

the output should be

    c=(1,3,5)  

(wich should be the result of a-b)

I've tried using

    unset a[${b}]  

any ideas?

what I have working now is a loop that runs trough 700,000 iterations

  
         
         

Lista de respuestas

6
 
vote
vote
La mejor respuesta
 

En primer lugar, si desea hacer esto por 700,000 iteraciones, usted realmente debe mirar algo más que Bash. Además, lo que muestras no es una matriz en bash, es una cadena 1 . Las matrices están separadas por espacios, no comas.

Dicho esto, aquí está un camino burdo, asumiendo matrices verdaderas:

  ABCDEFGHIJKLMNABCDEFGHIJKLMN5   

Si realmente tiene cadenas separadas por comas y no es matrices, use esto en su lugar:

  a=(1,2,3,4,5) b=(2,4) c=( $(sed 's/,/ /g' <(printf "%s " "${a[@]}" "${b[@]}") | sort | uniq -u) )   

Alternativamente, podría usar PERL en lugar:

  #!/usr/bin/perl my @A=(1,2,3,4,5); my @B=(2,4); my %k; map{$k{$_}++} (@A,@B); my @C=grep($k{$_}==1,keys(%k)); print "@C ";  

1 Hablando estrictamente, es una matriz con un elemento, pero eso es esencialmente lo mismo que una cadena en lo que se refiere a Bash.

 

First of all, if you want to do this for 700,000 iterations, you really should look into something other than bash. Also, what you show is not an array in bash, it's a string1. Arrays are separated by spaces, not commas.

That said, here's a bash way, assuming true arrays:

a=(1 2 3 4 5) b=(2 4) c=( $(printf "%s\n" "${a[@]}" "${b[@]}" | sort | uniq -u) ) 

If you actually have comma-separated strings and not arrays, use this instead:

a=(1,2,3,4,5) b=(2,4) c=( $(sed 's/,/\n/g' <(printf "%s\n" "${a[@]}" "${b[@]}") | sort | uniq -u) ) 

Alternatively, you could use perl instead:

#!/usr/bin/perl my @A=(1,2,3,4,5); my @B=(2,4); my %k; map{$k{$_}++} (@A,@B); my @C=grep($k{$_}==1,keys(%k)); print "@C\n"; 

1Strictly speaking, it's an array with one element but that is essentially the same as a string as far as bash is concerned.

 
 
 
 
1
 
vote

La complejidad La tarea (O (n ^ 2)) no se puede reducir; Suponiendo solo lo que se ha dado explícitamente (es decir, sin hipótesis para los valores de ambos matriz a y abcdefhijklmnabcdefghijklmn1 ) El código a continuación se comprobará si cada valor presente en abcdefghijklmn2 también está presente en ABCDEFGHIJKLMNABCDEFGHIJKLMN3 , y si el valor está presente, romperá el bucle interno for (la única optimización posible con la hipótesis dada) y agregará el valor a c ; Con más pistas sobre los contenidos de las matrices a y b (es decir, si los valores en cada matriz se pueden repetir y si las matrices se clasifican), puede haber un poco más Sala de mejora:

  ABCDEFGHIJKLMNABCDEFGHIJKLMN8   
 

The complexity the task (O(N^2)) cannot be reduced; assuming only what has been explicitly given (i.e. no hypothesis for the values of both array a and b) the code below will just check if each value present in a is also present in b, and if the value is present, it will break the inner for loop (the only optimization possible with the given hypothesis) and add the value to c; with more clues about the contents of the arrays a and b (i.e. if the values in each array might be repeated and if the arrays are sorted), there might be some more room for improvement:

#!/bin/bash  a=(1 2 3 4 5) b=(2 4) for i in ${a[@]} do match=0     for j in ${b[@]}     do         if [ "${i}" == "${j}" ]         then             match=1             break         fi     done if [ "${match}" == 0 ] then     c+=($i) fi done echo ${c[@]} 
 
 
     
     
1
 
vote

El ABCDEFGHIJKLMNABCDEFGHIJKLMN9 WAY. Este script muestra todos los elementos en la matriz ABCDEFGHIJKLMNABCDEFGHIJKLMN10 , que también están contenidos en la matriz ABCDEFGHIJKLMNABCDEFGHIJKLMN11 .

  b2  

Salida:

  b3  
 

The perl way. This script displays all elements in array a, which are also contained in array b.

#!/usr/bin/perl my @a = (1,2,3,4,5); my @b = (2,4,7,8,9,10);  # Create a hashmap with the entries in b as keys, # but without values for the keys for a better lookup # (exists ($hash{$element})) my %hash; @hash{@b}=();  foreach my $element (@a) {print "$element " unless exists($hash{$element})} print "\n"; 

Output:

1 3 5 
 
 
   
   
1
 
vote

en b4 , entradas como:

  b5  

son iterables y conocidos como b6 .

Se puede hacer su tarea fácilmente en b7 :

  b8  

Salida:

  b9  

Aquí hemos encontrado los valores de la tupla a0 , que no existen en tuple a1 y colóquelos en otra tupla a2 . También tenga en cuenta que esta operación será una rápido y de memoria eficiente para conjuntos de datos más grandes, ya que hemos usado Python Expresión del generador .

 

In python, entries like:

a=(1,2,3,4,5) b=(2,4) 

are iterables and known as tuples.

Your task can be easily done in python:

#!/usr/bin/env python2 a = (1, 2, 3, 4, 5) b = (2, 4) c = tuple(i for i in a if i not in b) print c 

Output :

(1, 3, 5) 

Here we have found the values of the tuple a, that do not exist in tuple b and put them in another tuple c. Also note that this operation will be fast and memory efficient for larger data sets as we have used python generator expression.

 
 
   
   

Relacionados problema

2  ¿Cómo funciona la indexación de Ubuntu en una máquina virtual?  ( How does ubuntus indexation work on a virtual machine ) 
Han pasado casi un año desde que publiqué esa pregunta sobre UNIX & AMP; Linux. Todavía no tiene respuesta y solo una pequeña cantidad de vistas, así que lo e...

1  ¿Cómo puedo buscar dentro del contenido PDF?  ( How can i search within pdf content ) 
Utilizamos recoll con una PC de escritorio para buscar entre PDF-S. En la última semana movimos todo a un servidor. ¿Hay solución alternativa de recuperación ...

3  Thunderbird no recordará que he desactivado la búsqueda e indexación global  ( Thunderbird wont remember that ive turned off global search and indexing ) 
He apagado la "búsqueda global e indexación" de Thunderbird una y otra vez. He eliminado el archivo global-messages-db.sqlite más de una vez. Esto funciona ...

7  Contenidos de archivo de indexación  ( Indexing file contents ) 
La gente parece que ya ha preguntado sobre el sistema de archivos de indexación: ¿Qué opciones hay para indexar mi sistema de archivos? ¿Cuáles son la...

1  Carpetas y archivos nobles con SINAPSE / GNOME DO / KUPFER  ( Unfindable folders and files with synapse gnome do kupfer ) 
He encontrado aplicaciones como Synapse increíblemente útil, pero mientras que antes parecían encontrar todo, ahora parecen haber dejado de funcionar para mí....

9  Zeitgeist no indexa las carpetas en la partición de NTFS  ( Zeitgeist does not index folders in ntfs partition ) 
Estoy usando Synapse + Unity Dash para buscar y parece que ninguna de estas carpetas de índice de estos pueden acceder en mi partición NTFS. Creo que esto se ...

1  ¿Cómo indexar notas Tomboy con RECOLLIR?  ( How to index tomboy notes with recoll ) 
Me gustaría indexar las notas de Tomboy con el motor de búsqueda de escritorio RECORL. Las notas están en xml , almacenado en .Local / Share / Tomboy. < / ...

23  ¿Cómo hacer una primera búsqueda más rápida en Unity-Dash? Camino más lento que el segundo  ( How to make faster first search at unity dash way slower than second one ) 
Después de un reinicio, la primera búsqueda usando Unity Dash será más lenta (15 seg) que la segunda búsqueda (parece instantánea), al menos en mi sistema. ...

7  ¿Cuál es la mejor manera de buscar mi sistema de archivos en Ubuntu con resultados instantáneos?  ( Whats the best way to search my file system on ubuntu with instant results ) 
¿Cuál es la mejor manera de buscar mi sistema de archivos en Ubuntu y obtener resultados casi al instante? He usado bagre , rastreador y la herramienta de ...

9  ¿El calibre admite la indexación / búsqueda de texto completo?  ( Does calibre support full text indexing search ) 
Calibre tiene toneladas de complementos, pero lo que realmente extraño es la búsqueda de texto completo de todos mis libros (principalmente PDF y DJVU). ¿Está...




© 2022 respuesta.top Reservados todos los derechos. Centro de preguntas y respuestas reservados todos los derechos