Le code Java existe mais j'essaie de le convertir en groovy. Dois-je simplement le conserver tel quel avec System.arraycopy ou groovy a-t-il une meilleure façon de combiner des tableaux comme celui-ci ?
byte[] combineArrays(foo, bar, start) {
def tmp = new byte[foo.length + bar.length]
System.arraycopy(foo, 0, tmp, 0, start)
System.arraycopy(bar, 0, tmp, start, bar.length)
System.arraycopy(foo, start, tmp, bar.length + start, foo.length - start)
tmp
}
Je vous remercie
def a = [1, 2, 3]
def b = [4, 5, 6]
assert a.plus(b) == [1, 2, 3, 4, 5, 6]
assert a + b == [1, 2, 3, 4, 5, 6]
Si vous souhaitez utiliser un tableau:
def abc = [1,2,3,4] as Integer[] //Array
def abcList = abc as List
def xyz = [5,6,7,8] as Integer[] //Array
def xyzList = xyz as List
def combined = (abcList << xyzList).flatten()
Utilisation des listes:
def abc = [1,2,3,4]
def xyz = [5,6,7,8]
def combined = (abc << xyz).flatten()
def a = [1, 2, 3]
def b = [4, 5, 6]
a.addAll(b)
println a
>> [1, 2, 3, 4, 5, 6]
J'irais avec
byte[] combineArrays(foo, bar, int start) {
[*foo[0..<start], *bar, *foo[start..<foo.size()]]
}
Cela pourrait se faire comme ceci:
def newCombine(foo,bar,start) {
([].add + foo[0..<start]+bar+foo[start..<foo.size()]).flatten()
}
Il fonctionne pour toutes sortes de tableaux (octet []) ou listes
L'astuce est la méthode flatten (), qui combinait des tableaux imbriqués en un seul:
def a = [1, 2, 3]
def b = [4, 5, 6]
def combined = [a, b].flatten()
assert combined == [1, 2, 3, 4, 5, 6]
println(combined)
Pour supprimer des valeurs nulles, vous pouvez utiliser findAll () comme ceci:
def a = null
def b = [4, 5, 6]
def combined = [a, b].flatten().findAll{it}
assert combined == [4, 5, 6]
println(combined)
Toutes les solutions ci-dessus échouent si un tableau n'est pas défini:
def a = [1,2]
def b
assert a+b == [1, 2, null]
ce qui n'est probablement pas ce que vous voulez.
Soit tester si le tableau existe avant d'ajouter:
def a = [1,2,3,4]
def b // null array
def c = [0,4,null,6]
def abc = []
[a,b,c].each{ if (it) abc += it }
assert abc == [1, 2, 3, 4, 0, 4, null, 6]
ou ajoutez tout, puis filtrez la sortie:
(a+b+c).findAll{ it != null }
(en supposant ici que null
n'est pas une valeur valide dans les tableaux d'origine, ce qui implique que la première solution est bien meilleure, même si elle ne semble pas assez Groovy.)