1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Power Query workout - List.AllTrue / List.AnyTrue / List.Contains / List.ContainsAll / List.ContainsAny

Posted at

先行評価(eager evaluation)と短絡評価(short-circuit evaluation)に使いたいので。短絡評価 であれば if - then - else - を代替できる。

確認方法

Power Query
// fxTrace
(message as text, value as function) as any =>
    Diagnostics.Trace(
        TraceLevel.Information, message, value, true
    )
Power Query
// SourceList
{
    fxTrace("#1 - false", ()=> 1 = 0),
    fxTrace("#2 - true",  ()=> 1 > 0),
    fxTrace("#3 - false", ()=> 0 = 1)
}

評価結果

すべての list アイテムを評価する

List.AllTrue は妥当だが List.AnyTrue が意外に感じる。先行評価(eager evaluation)用途の関数なのだろう。

List.AllTrue

Power Query
// AllTrue
List.AllTrue(SourceList)
Message
#1 - false
#2 - true
#3 - false

List.AnyTrue

Power Query
List.AnyTrue(SourceList)
Message
#1 - false
#2 - true
#3 - false

可能な限りすべての list アイテムを評価しない

短絡評価(short-circuit evaluation)を期待する使用をしたい。

List.Contains

Power Query
List.Contains(SourceList, true)
Message
#1 - false
#2 - true

List.ContainsAll

Power Query
List.ContainsAll(SourceList, {true})
Message
#1 - false
#2 - true
Power Query
List.ContainsAll(SourceList, {true, 0})
Message
#1 - false
#2 - true
#3 - false
Power Query
List.ContainsAll(SourceList, {true, false})
Message
#1 - false
#2 - true

List.ContainsAny

Power Query
List.ContainsAny(SourceList, {true})
Message
#1 - false
#2 - true
Power Query
List.ContainsAny(SourceList, {true, false})
Message
#1 - false
#2 - true
Power Query
List.ContainsAny(SourceList, {true, 0})
Message
#1 - false
#2 - true

その他

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?