fireworker72
Anmeldungsdatum: 11. März 2017
Beiträge: 64
|
Hallo Leute Wie schaffe Ich es aus 2 Arrays eines zu machen? Array1 Zeile 1 "Aussentemperatur"
Array2 Zeile 1 "15" und in Array3 soll dann in Zeile 1 "Aussentemperatur 15" stehen es gibt natürlich mehr Zeilen in jedem Array hab nur eine als Beispiel herrausgenommen Danke für eure Mithilfe
|
seahawk1986
Anmeldungsdatum: 27. Oktober 2006
Beiträge: 11176
Wohnort: München
|
Wenn die Indices identisch sind, ginge das z.B. so: 1
2
3
4
5
6
7
8
9
10
11
12
13 | #!/bin/bash
array_1=(foo bar baz)
array_2=(1 2 3)
if [ ${#array_1[@]} -eq ${#array_2[@]} ]; then
array_3=()
for i in ${!array_1[@]}; do
array_3[$i]="${array_1[$i]} ${array_2[$i]}"
done
else
echo "arrays have different numbers of elements!"
fi
printf "%s\n" "${array_3[@]}"
|
|
rklm
Projektleitung
Anmeldungsdatum: 16. Oktober 2011
Beiträge: 12802
|
fireworker72 schrieb:
Wie schaffe Ich es aus 2 Arrays eines zu machen?
Von welcher Programmiersprache sprechen wir denn?
|
Marc_BlackJack_Rintsch
Ehemalige
Anmeldungsdatum: 16. Juni 2006
Beiträge: 4563
Wohnort: Berlin
|
Gaaaanz bestimmt von Io. 😉 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 | #!/usr/bin/env io
main := method(
list_a := List with("foo", "bar", "baz")
list_b := List with(1, 2, 3)
(list_a size != list_b size) ifTrue(
Exception raise("lists have different lengths")
)
list_c := list_a map(index, value, value .. " " .. list_b at (index))
list_c println
)
isLaunchScript ifTrue(main)
|
|
seahawk1986
Anmeldungsdatum: 27. Oktober 2006
Beiträge: 11176
Wohnort: München
|
Oder ein Einzeiler für Python 3.6 (da heißen die Arrays Listen, wenn sie beliebige Objekte beinhalten sollen dürfen):
| combined_list = [f"{a} {b}" for a, b in zip(["foo", "bar", "baz"], [1,2,3])]
|
|
Marc_BlackJack_Rintsch
Ehemalige
Anmeldungsdatum: 16. Juni 2006
Beiträge: 4563
Wohnort: Berlin
|
Könnte natürlich auch CoffeeScript sein:
1
2
3
4
5
6
7
8
9
10
11
12 | #!/usr/bin/env coffee
'use strict'
_ = require 'lodash'
main = ->
as = ['foo', 'bar', 'baz']
bs = [1, 2, 3]
throw new Error 'arrays have different lengths' if as.length != bs.length
cs = _.zipWith as, bs, (a, b) -> "#{a} #{b}"
console.log cs
main() if require.main == module
|
|
track
Anmeldungsdatum: 26. Juni 2008
Beiträge: 7174
Wohnort: Wolfen (S-A)
|
Wenn die Daten bereits in 2 Variablen-Arrays stehen, reicht es die Elemente einfach hintereinander zu stellen: (ganz gleich in welcher Sprache) | for i in {1..17}; do
echo "${array1[i]} ${array2[i]}"
done
|
Oder, wenn die Arrays in 2 Dateien stehen, einfach mit dem Shell-Befehl paste : track@track:~$ echo "Innentemperatur
> Außentemperatur
> Wassertemperatur" > array1
track@track:~$ echo '15
> 8
> 27' > array2
track@track:~$ paste -d \ array1 array2
Innentemperatur 15
Außentemperatur 8
Wassertemperatur 27 Falls die Lesart meiner Vorredner stimmen sollte, dass in jeder Zeile noch ein Index-Element davor steht, wird es ein Fall für merge . War es das, was Du suchtest ? LG, track
|
Marc_BlackJack_Rintsch
Ehemalige
Anmeldungsdatum: 16. Juni 2006
Beiträge: 4563
Wohnort: Berlin
|
Es könnte natürlich auch C++ sein:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 | #include <algorithm>
#include <array>
#include <iostream>
#include <string>
using namespace std;
string f(string &s, int i) {
return s + " " + to_string(i);
}
int main() {
array<string, 3> as {{"foo", "bar", "baz"}};
array<int, 3> bs {{1, 2, 3}};
array<string, as.size()> cs;
transform(as.begin(), as.end(), bs.begin(), cs.begin(), f);
for (const auto& x: cs) {
cout << x << endl;
}
return 0;
}
|
|
fireworker72
(Themenstarter)
Anmeldungsdatum: 11. März 2017
Beiträge: 64
|
|
rklm
Projektleitung
Anmeldungsdatum: 16. Oktober 2011
Beiträge: 12802
|
track schrieb: Wenn die Daten bereits in 2 Variablen-Arrays stehen, reicht es die Elemente einfach hintereinander zu stellen: (ganz gleich in welcher Sprache)
👍
| for i in {1..17}; do
echo "${array1[i]} ${array2[i]}"
done
|
Achtung: der Index ist 0-basiert! | $ a=(foo bar)
$ echo "${a[1]}"
bar
|
|
Marc_BlackJack_Rintsch
Ehemalige
Anmeldungsdatum: 16. Juni 2006
Beiträge: 4563
Wohnort: Berlin
|
Ob das hintereinander ausgeben reicht hängt davon ab ob das reicht, würde ich sagen. ☺ Schade das es Bash ist, ich habe da noch so eine ”schöne” 4GL-Lösung:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23 | GLOBALS
DEFINE as ARRAY[3] OF CHAR(5),
bs ARRAY[3] OF INTEGER,
cs ARRAY[3] OF CHAR(10),
i INTEGER
END GLOBALS
MAIN
LET as[1] = "foo"
LET as[2] = "bar"
LET as[3] = "baz"
LET bs[1] = 1
LET bs[2] = 2
LET bs[3] = 3
FOR i = 1 TO 3
LET cs[i] = as[i] CLIPPED, " ", bs[i]
END FOR
FOR i = 1 TO 3
DISPLAY cs[i]
END FOR
END MAIN
|
|
rklm
Projektleitung
Anmeldungsdatum: 16. Oktober 2011
Beiträge: 12802
|
Wo wir schon mal dabei sind: Wir hatten auch noch keine Ruby-Lösung. Also: 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 | # Beispieldaten
a1 = 10.times.to_a
a2 = (11..20).to_a
# Merge 1
a3 = a1.zip(a2).each_with_object([]) {|(x,y),z| z << "#{x}-#{y}"}
# Merge 2
a3 = a1.zip(a2).inject([]) {|z, (x,y)| z << "#{x}-#{y}"}
# Merge 3
a3 = [].tap {|z| a1.zip(a2) {|x,y| z << "#{x}-#{y}"}}
# Ausgabe
p a3
|
|
Marc_BlackJack_Rintsch
Ehemalige
Anmeldungsdatum: 16. Juni 2006
Beiträge: 4563
Wohnort: Berlin
|
Haskell hatten wir auch noch nicht ☺
| main :: IO ()
main =
let xs = ["foo", "bar", "baz"]
ys = [1..3]
zs = [x ++ " " ++ show y | (x, y) <- zip xs ys]
in putStr $ unlines zs
|
|
apt-ghetto
Anmeldungsdatum: 3. Juni 2014
Beiträge: 2943
|
Perl hat bis jetzt auch gefehlt: 1
2
3
4
5
6
7
8
9
10
11
12 | #!/usr/bin/perl -w
# mergeArray.pl ---
use warnings;
use strict;
my @array1 = qw! Aussentemperatur Innentemperatur Aussentemperatur !;
my @array2 = qw! 15 18 17 !;
foreach (0..$#array1) {
print "$array1[$_] $array2[$_]\n";
}
|
|
TausB
Anmeldungsdatum: 26. November 2009
Beiträge: 1562
Wohnort: Terra incognita
|
Habe keine Ahnung mehr, aber kann noch jemand Fortran77? - Wie sähe hier die Lösung aus? 😉
|