代码之家  ›  专栏  ›  技术社区  ›  mickp

如何获取稀疏数组中的下一个元素?

  •  1
  • mickp  · 技术社区  · 6 年前

    我需要得到数组的下一个元素。对于连续数组,我的代码工作得很好:

    arr=(item{2..5})
    value=item3
    
    for ((i=0;i<${#arr[@]};++i)); do
        if [[ ${arr[i]} = "$value" ]] && (( i+1<${#arr[@]} )); then
            echo "${arr[i+1]}"
            break
        fi  
    done
    

    我没有找到任何关于参数扩展在稀疏数组上的行为的定义,不幸的是,此代码也没有产生所需的结果:

    arr=([3]=item2 [7]=item3 [10]=item4 [1]=item5)
    
    for ((i=0;i<${#arr[@]};++i)); do
        if [[ ${arr[@]:i:1} = "$value" ]]; then
            ...
            ...
        fi
    done
    

    如何对稀疏数组执行此操作(可能不需要复制数组以重新索引它)?

    1 回复  |  直到 6 年前
        1
  •  2
  •   Cyrus    6 年前
    #!/bin/bash
    
    arr=([3]=item2 [7]=item3 [10]=item4 [1]=item5)
    value="item3"
    switch="0"
    
    # loop over array's indexes
    for i in "${!arr[@]}"; do
      if [[ $switch = "1" ]]; then
        echo "found ${arr[$i]} in element $i"
        switch="0"
        break
      fi
    
      if [[ ${arr[$i]} = "$value" ]]; then
        echo "found ${arr[$i]} in element $i"
        switch="1"
        continue
      fi
    done
    

    found item3 in element 7
    found item4 in element 10
    


    help continue