Quem alterna entre linguagens passa boa parte do tempo perguntando a mesma coisa: "como é que se faz isso aqui de novo?" Este artigo é uma referência prática para o catálogo mais usado — operações sobre arrays (JavaScript), listas (Python), slices (Go) e Array (Ruby on Rails).
A organização espelha a do post original em JavaScript: tamanho, manipulação de elementos, acesso e busca, iteração e transformação, ordenação, fatiamento e junção, predicados e achatamento. Cada método traz um snippet equivalente nas quatro linguagens, sempre na variante mais idiomática.
Antes de Começar: Três Diferenças Importantes
- Mutação vs nova coleção. Em JavaScript e Python,
sortereversemutam a coleção; jámap,filtereslicedevolvem nova. Em Ruby, a convenção é clara pelo sufixo:sort!muta,sortdevolve nova. Em Go, slices compartilham storage subjacente — sempre verifique se está mutando o original. - Tratamento de "não encontrado". JavaScript usa
-1, Python lançaValueError, Go retorna-1viaslices.Index, e Ruby devolvenil. Não são detalhes — mudam o controle de fluxo. - Go é mais verboso por design. A std de Go evita closures genéricas até onde dá. O pacote
slices(Go 1.21+) cobre boa parte do gap; o resto resolve comfor range. Ruby on Rails segue o caminho oposto: blocos com{ |v| ... }tornam quase tudo uma linha.
Tamanho
length / len
Retorna o número de elementos do array, lista ou slice.
arr.length;len(arr)len(arr)arr.length # ou arr.sizeManipulação de Elementos
push / append
Adiciona um elemento ao final.
arr.push(4);arr.append(4)arr = append(arr, 4)arr.push(4) # ou arr << 4pop
Remove e retorna o último elemento.
const last = arr.pop();last = arr.pop()last := arr[len(arr)-1]
arr = arr[:len(arr)-1]last = arr.popunshift / insert no início
Adiciona um elemento no início.
arr.unshift(0);arr.insert(0, 0)arr = append([]int{0}, arr...)arr.unshift(0)shift / pop no início
Remove e retorna o primeiro elemento.
const first = arr.shift();first = arr.pop(0)first := arr[0]
arr = arr[1:]first = arr.shiftsplice
Insere e remove elementos arbitrariamente em qualquer posição.
arr.splice(1, 2, "a", "b");arr[1:3] = ["a", "b"]arr = append(arr[:1],
append([]string{"a", "b"}, arr[3:]...)...)arr[1, 2] = ["a", "b"]concat
Concatena dois arrays e retorna um novo.
const c = a.concat(b);c = a + bc := append(a, b...)c = a + b # a.concat(b) muta aAcesso e Busca
Go e Ruby expõem boa parte dessas operações via std. Em Go 1.21+, o pacote slices traz utilitários nativos; em Rails, o ActiveSupport adiciona helpers como pluck e compact_blank sobre o Array de Ruby.
indexOf
Retorna o índice da primeira ocorrência, ou um valor sentinela quando não encontra.
arr.indexOf(x); // -1 se não achararr.index(x) # lança ValueError se não acharslices.Index(arr, x) // -1 se não achararr.index(x) # nil se não acharlastIndexOf
Retorna o índice da última ocorrência.
arr.lastIndexOf(x);len(arr) - 1 - arr[::-1].index(x)slices.IndexFunc(arr, func(v int) bool {
return v == x
}) // ou loop reversoarr.rindex(x)includes
Indica se o elemento existe no array.
arr.includes(x);x in arrslices.Contains(arr, x)arr.include?(x)find
Retorna o primeiro elemento que satisfaz a condição.
arr.find((v) => v > 3);next((v for v in arr if v > 3), None)i := slices.IndexFunc(arr, func(v int) bool {
return v > 3
})
if i >= 0 { /* arr[i] */ }arr.find { |v| v > 3 }findIndex
Retorna o índice do primeiro elemento que satisfaz a condição.
arr.findIndex((v) => v > 3);next(
(i for i, v in enumerate(arr) if v > 3),
-1,
)slices.IndexFunc(arr, func(v int) bool {
return v > 3
})arr.index { |v| v > 3 }Iteração e Transformação
forEach
Executa um efeito colateral para cada elemento.
arr.forEach((v) => console.log(v));for v in arr:
print(v)for _, v := range arr {
fmt.Println(v)
}arr.each { |v| puts v }map
Aplica uma transformação e devolve uma nova coleção.
const doubled = arr.map((v) => v * 2);doubled = [v * 2 for v in arr]doubled := make([]int, len(arr))
for i, v := range arr {
doubled[i] = v * 2
}doubled = arr.map { |v| v * 2 }filter
Mantém apenas os elementos que satisfazem a condição.
arr.filter((v) => v > 3);[v for v in arr if v > 3]var out []int
for _, v := range arr {
if v > 3 {
out = append(out, v)
}
}arr.select { |v| v > 3 }reduce / inject
Combina os elementos em um único valor, da esquerda para a direita.
arr.reduce((acc, v) => acc + v, 0);from functools import reduce
reduce(lambda acc, v: acc + v, arr, 0)
# ou simplesmente sum(arr)acc := 0
for _, v := range arr {
acc += v
}arr.reduce(0) { |acc, v| acc + v }
# ou simplesmente arr.sumreduceRight
Mesmo reduce, mas percorrendo da direita para a esquerda.
arr.reduceRight((acc, v) => acc + v, 0);reduce(lambda acc, v: acc + v, reversed(arr), 0)acc := 0
for i := len(arr) - 1; i >= 0; i-- {
acc += arr[i]
}arr.reverse.reduce(0) { |acc, v| acc + v }Ordenação
sort
Ordena os elementos em ordem crescente.
arr.sort((a, b) => a - b);arr.sort()slices.Sort(arr)arr.sort! # ou arr.sort (não muta)reverse
Inverte a ordem dos elementos.
arr.reverse();arr.reverse()slices.Reverse(arr)arr.reverse! # ou arr.reverse (não muta)Fatiamento e Junção
slice
Cria uma cópia (ou visão, em Go) de um intervalo.
arr.slice(1, 3);arr[1:3]arr[1:3]arr[1..2] # ou arr.slice(1, 2)join
Une os elementos em uma string usando um separador. Em Go, a coleção precisa ser de strings.
arr.join(",");",".join(arr)strings.Join(arr, ",")arr.join(",")Predicados e Achatamento
every / all?
Verdadeiro se todos os elementos satisfazem a condição.
arr.every((v) => v > 0);all(v > 0 for v in arr)ok := true
for _, v := range arr {
if v <= 0 {
ok = false
break
}
}arr.all? { |v| v > 0 }some / any?
Verdadeiro se pelo menos um elemento satisfaz a condição.
arr.some((v) => v > 0);any(v > 0 for v in arr)slices.IndexFunc(arr, func(v int) bool {
return v > 0
}) >= 0arr.any? { |v| v > 0 }flat / flatten
Achata um nível de aninhamento.
arr.flat(1);[x for sub in arr for x in sub]var out []int
for _, sub := range arr {
out = append(out, sub...)
}arr.flatten(1)flatMap / flat_map
Aplica uma função que devolve coleção e achata o resultado.
arr.flatMap((v) => [v, v * 2]);[x for v in arr for x in (v, v * 2)]var out []int
for _, v := range arr {
out = append(out, v, v*2)
}arr.flat_map { |v| [v, v * 2] }Como Usar Esta Referência
O objetivo desta tabela cruzada não é cobrir todos os casos extremos — é fixar o equivalente mais idiomático para o cotidiano. Para semântica completa (alocação, complexidade, comportamento em edge cases), as referências canônicas são: MDN Array, Python Data Structures, Go slices e Ruby Array (mais extensões do ActiveSupport em projetos Rails).
Em resumo: os nomes mudam, mas o conjunto de operações que importa no dia a dia é estável entre linguagens. Saber o mapeamento corta dezenas de consultas e elimina aquele atrito de troca de stack.