我正在尝试将两个数组合并为一个像拉链一样的时尚。我很难做到这一点。
window.onmousemove = function (e) {
for (var i = 0; i < tooltips.length; i++) {
var width = tooltips[i].offsetWidth;
var x = (e.clientX - (width)/2) + 'px',
y = (e.clientY - 40) + 'px';
tooltips[i].style.top = y;
tooltips[i].style.left = x;
}
};
我尝试过使用嵌套的for循环,但无法解决这个问题。我不希望输出为13572468但是12345678。
我正在处理的实际脚本在这里(http://ix.io/iZR)..但它显然无法按预期工作。我要么打印整个array2(例如124683),要么只是第一个索引,就好像循环没有工作(例如12325272)。
那么如何获得输出:
array1=(one three five seven)
array2=(two four six eight)
以上两个数组?
编辑:我能够通过两个for循环和one two three four five six seven eight
(http://ix.io/iZU)来解决它。看看有人有更好的解决方案仍然会很有趣。所以,如果你有时间,请看看。
答案 0 :(得分:7)
假设两个阵列的大小相同,
unset result
for (( i=0; i<${#array1[*]}; ++i)); do result+=( ${array1[$i]} ${array2[$i]} ); done
答案 1 :(得分:3)
我发现更常见的情况是我要将两个数组压缩成 两列。这不像“RTLinuxSW”答案那样本地Zsh,但是 对于这种情况,我使用粘贴。
% tabs 16
% paste <(print -l $array1) <(print -l $array2)
one two
three four
five six
seven eight
然后可以将其推入另一个数组以获得预期的输出:
% array3=( `!!`«tab»«tab» )
% print $array3
one two three four five six seven eight
答案 2 :(得分:0)
您可以轻松读取文件,创建包含其内容的数组,检查谁是更大的文件并进行循环。
#!/usr/bin/env bash
## Writting a until d into the file file01 and writing 1 until 3 into the file file02.
echo {a..d} | tee file01
echo {1..3} | tee file02
## Declaring two arrays (FILE01 and FILE02) and a variable as integer.
declare -a FILE01=($(<file1))
declare -a FILE02=($(<file2))
declare -i COUNT=0
## Checking who is the biggest array and declaring the ARRAY_SIZE.
[[ "${#FILE01[@]}" -ge "${#FILE02[@]}" ]] && declare -i ARRAY_SIZE="${#FILE01[@]}" || declare -i ARRAY_SIZE="${#FILE02[@]}"
## Creating the loop (COUNT must be lesser or equal ARRAY_SIZE) and print each element of each array (FILE01 and FILE02).
while [ ${COUNT} -le ${ARRAY_SIZE} ]; do
echo -n "${FILE01[$COUNT]} ${FILE02[$COUNT]} "
((COUNT++))
done
declare -a
->它创建一个数组
declare -i
->将var声明为整数
${#FILE01[@]}
->获取数组大小
答案 3 :(得分:0)
paste
和printf
来使用 @Socowi 。非常感谢@Socowi提出问题并提供以其他方式分隔数据的解决方法! /更新>
这是另一种解决方案,可以交错(2)个数组中的数据,这些数组中填充了用换行符分隔的单独文件中的数据。此解决方案使用paste
,echo
和xargs
:
数组数据:我将文件输入数组,因为我喜欢从代码中分解数据。以下每个文件值由换行符分隔的文件将由readarray
使用:
test1.txt :
one
three
five
seven
test2.txt :
two
four
six
eight
将它们放在一起:
#!/bin/bash
readarray arrayTest1 < /root/test1.txt
readarray arrayTest2 < /root/test2.txt
paste <( echo "${arrayTest1[*]}" ) <( echo "${arrayTest2[*]}" ) | xargs
输出:
one two three four five six seven eight
答案 4 :(得分:0)
这是基于RTLinuxSW的answer的基础上,对Paused until further notice的comment的改进,它增加了对稀疏数组和关联数组的支持。
for index in "${!array1[@]}"; do # Also, quote indices
result+=( "${array1[$index]}" "${array2[$index]}" )
done
之后:
$ echo "${result[@]}"
one two three four five six seven eight
$ declare -p result
declare -a result=([0]="one" [1]="two" [2]="three" [3]="four" [4]="five" [5]="six" [6]="seven" [7]="eight")
这假定两个数组的索引相同。