としてRubyで行われるかもしれないが、ヘルパー関数を使用すると、それはほとんどのように短くすることができます。ここで
は、スライスをループし、当社のヘルパー関数です、と選択して、関数値で撮影した基準を満たすだけの要素を返します。
あなたのタスクこのヘルパー関数を使用して
func choose(ss []string, test func(string) bool) (ret []string) {
for _, s := range ss {
if test(s) {
ret = append(ret, s)
}
}
return
}
:
ss := []string{"foo_1", "asdf", "loooooooong", "nfoo_1", "foo_2"}
mytest := func(s string) bool { return !strings.HasPrefix(s, "foo_") && len(s) <= 7 }
s2 := choose(ss, mytest)
fmt.Println(s2)
出力(Go Playground上でそれを試してみてください):
[asdf nfoo_1]
注:多くの要素が選択されることが期待されている場合は
、事前に「ビッグ」ret
スライスを割り当て、その代わりappend()
の単純な代入を使用することが有益であるかもしれません。戻す前に、ret
を選択した要素の数と同じ長さにスライスします。
ノート#2:私の例では
私は要素が返される場合告げるtest()
機能を選択しました。だから私はあなたの "除外"条件を逆転させなければならなかった。明らかに、何を除外すべきかを指示するテスター関数を期待するためのヘルパー関数を書くことができます(何を含めるかではありません)。
ありがとうございました!それは良い方法です。 – user2490003
Upvoteは 'filter'の代わりに' choose'を使用しています。もっと慣れて、 "filter"よりも返すものを "選択"してください。 – Verran
@Verran "choose"は、私にとっては(たぶんランダムに)1つの結果しか示唆していません。しかし、「フィルタ」は、存在するすべての言語とライブラリで、ある条件を明確に視覚化して、あるものを通過させ、他の条件を妨げます。 –