シュワルツ変換

読み:シュワルツへんかん
外語:Schwartzian Transform 英語
品詞:名詞

リストを、各要素に一定の演算を施したもので操作したいが、最終的に必要なのが演算の結果ではなく、本来の要素である場合に用いる手法。

目次

一定の演算を施した要素と元々の要素を組にしたリストを作成し、演算された要素を用いてリスト全体に対して操作を行ない、最後に組の中から元々の要素だけを取り出すことで必要な結果を得る。

とくに、リストの整列の際、要素の比較に用いる条件が複雑な場合に、あらかじめ各要素を比較するための値を算出しておいて、何度も計算するのを避けるために用いることが多い。

名前は、Just another Perl hacker,であるランダル・シュワルツ(Randal L. Schwartz)に由来する。

記述は簡潔になるが、一時作業用のメモリー消費量が余分に必要になる。

  1. 与えられたリストから「各要素と、その要素に与えられた演算を施したものの組」のリストを作成。
  2. 操作(sortなど)を行なう。
  3. 2の結果から、本来の要素に相当するものだけを取り出す。

文字列のリストを、大文字/小文字の違いを無視して整列する例。

Perlの場合、次のようになる。

@sorted = map { $_->[0] }
          sort { $a->[1] cmp $b->[1] }
          map { [ $_, lc($_) ] } @unsorted;

Rubyの場合、次のようになる。

sorted = unsorted.collect { |e| [ e, e.downcase ] }.
                  sort { |a, b| a[1] <=> b[1] }.
                  collect {|e| e[0] }
関連する用語
Perl
Ruby

コメントなどを投稿するフォームは、日本語対応時のみ表示されます


KisoDic通信用語の基礎知識検索システム WDIC Explorer Version 7.04a (27-May-2022)
Search System : Copyright © Mirai corporation
Dictionary : Copyright © WDIC Creators club