Vim script で条件にマッチする要素を取得する

いわゆる find 的な機能。
一応、組み込み関数で index() というのがあるんですが、これだとリストにしか対応していない & 式が渡せないという欠点があります。

echo index(["mami", "homu", "mado"],"homu")
" => 1

" 式は渡せない
echo index(["mami", "homu", "mado"],'v:val =~ ''^h''')

" エラー
" echo index(({"homu" : 2, "mami" : 5, "mado" : -42}), "homu")


こういう場合は filter() を使用すると便利です。

echo filter(["mami", "homu", "mado"], 'v:val =~ ''^h''')
" => ["homu"]

" 最初にマッチした値を取得したい場合
echo get(filter(["mami", "homu", "mado"], 'v:val =~ ''^h'''), 0, "")
" => "homu"

echo filter({"homu" : 2, "mami" : 5, "mado" : -42}, 'v:key =~ ''^m''')
" = > {'mami': 5, 'mado': -42}