部分一致に基づいてリストをフィルタリングする最速の方法。<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />部分一致に基づいてリストをフィルタリングするより高速な方法があるかどうかを確認しようとしています。以下のコードを参照してください。 ちなみに、これはリストのすべての改善が行われる前の JMP 12 のものです。
デフォルトの名前はここにあります( 1 );
dt =新しいテーブル( "テスト" 、
新しい列( 「サムリスト」 、値を設定( 1 :: 100000 ))、
プライベート
);
リスタ =カラム(dt、 「サムリスト」 ) <<データ・タイプ(文字) <<値の取得;
近い(dt、保存なし);
filter_by_partial_match =関数({リスト, 値},
dt =新しいテーブル( "もっと早く?" 、
新しい列( 「ファンリスト」 、文字、設定値(リスト))、
新しい列( 「ブール」 、 式(含まれています(小文字(:ファンリスト)、小文字(価値) )) )、
プライベート
);
ブール値 =ロック(カラム(dt、 「ブール」 )<<値の取得);
filtered_list = :funlist[ブール];
近い(dt、保存なし);
フィルターされたリスト;
);
開始時間 = HP時間();
filtered_list = filter_by_partial_match(lista, 「2」 );
t_time = HP時間() - 始まる時間;
見せる(t_時間、 niitems(filtered_list));
誰かもっと良い方法を知っていますか?
Re: 部分一致に基づいてリストをフィルタリングする最速の方法。データテーブルはマルチスレッド (col 式など) の恩恵を受けていると思います。 したがって、JMP 12 でこれをより高速に行う方法があるとしたら、私は驚くでしょう。
Re: 部分一致に基づいてリストをフィルタリングする最速の方法。はい、リスト全体を小文字にすると、間違いなくオーバーヘッドが発生します。少なくとも値を小文字にすることはできます。ただし、やはりパフォーマンスの向上はそれほど大きくありません。
Re: 部分一致に基づいてリストをフィルタリングする最速の方法。リスト全体を小文字にするにはどうすればよいですか?そうすることで得られる利益よりも、そのコストの方が大きいのではありませんか?
Re: 部分一致に基づいてリストをフィルタリングする最速の方法。そうですね、13 リストの改善は気に入っています。 しかし、残念なことに、顧客のために 12 を使用する必要があります。私は彼らに13番に行くように言うのが大好きですが、それはおそらく無駄な試みです。
Re: 部分一致に基づいてリストをフィルタリングする最速の方法。
バージョン 13 はもう試しましたか? プライベート テーブル アプローチを使用した結果は次のとおりです。
t_time = 115828;
N 項目 (フィルターされたリスト) = 40951;
ループを使用した結果は次のとおりです。
t_time = 61895;
N 項目 (フィルターされたリスト) = 40951;
対照的に、これはバージョン 12 で得たものです。
t_time = 127356;
N 項目 (フィルターされたリスト) = 40951;
t_time = 161896168;
N 項目 (フィルターされたリスト) = 40951;
Re: 部分一致に基づいてリストをフィルタリングする最速の方法。列の式から小文字の関数を削除し、代わりに小文字のリストを送信して値を小文字に設定すると、多少の改善が得られます。それ以外の場合、これはかなり高速に見えます。
Re: 部分一致に基づいてリストをフィルタリングする最速の方法。早いですね! ループや正規表現のアプローチは、及ばないでしょう (私は試みましたが失敗しました...)。