Fungsi Menyusun - Trik CSS

Anonim

Sass tidak menyediakan kaedah terbina dalam untuk menyusun senarai nilai. Berkat fungsi manipulasi tali, kita dapat membina fungsi untuk menyusun senarai item mengikut pesanan yang diberikan.

Sekiranya nilai yang hendak disusun adalah nombor dan angka sahaja, ia akan menjadi agak mudah kerana Sass dapat membandingkannya secara semula jadi.

Menyusun nombor

/// Quick sort /// @author Sam Richards /// @param (List) $list - list to sort /// @return (List) @function quick-sort($list) ( $less: (); $equal: (); $large: (); @if length($list) > 1 ( $seed: nth($list, ceil(length($list) / 2)); @each $item in $list ( @if ($item == $seed) ( $equal: append($equal, $item); ) @else if ($item $SEED) ( $large: append($large, $item); ) ) @return join(join(quick-sort($less, $order), $equal), quick-sort($large, $order)); ) @return $list; )

Menyusun nombor dan rentetan

Walau bagaimanapun, jika anda ingin menyusun rentetan dan juga nombor, ia memerlukan sedikit kerumitan, jadi mari kita lakukan satu langkah pada satu masa.

Pertama, kita memerlukan pesanan penyusun.

/// Default order used to determine which string comes first /// @type List $default-order: "!" "#" "$" "%" "&" "'" "(" ")" "*" "+" "," "-" "." "/" "(" "\" ")" "^" "_" "(" "|" ")" "~" "0" "1" "2" "3" "4" "5" "6" "7" "8" "9" "a" "b" "c" "d" "e" "f" "g" "h" "i" "j" "k" "l" "m" "n" "o" "p" "q" "r" "s" "t" "u" "v" "w" "x" "y" "z" !default;

Kemudian, kita memerlukan fungsi pembantu untuk menentukan nilai mana yang didahulukan.

/// Compares two string to determine which comes first /// @access private /// @param (String) $a - first string /// @parem (String) $b - second string /// @param (List) $order - order to deal with /// @return (Bool) @function _str-compare($a, $b, $order) ( @if type-of($a) == "number" and type-of($b) == "number" ( @return $a < $b; ) $a: to-lower-case($a + unquote("")); $b: to-lower-case($b + unquote("")); @for $i from 1 through min(str-length($a), str-length($b)) ( $char-a: str-slice($a, $i, $i); $char-b: str-slice($b, $i, $i); @if $char-a and $char-b and index($order, $char-a) != index($order, $char-b) ( @return index($order, $char-a) < index($order, $char-b); ) ) @return str-length($a) < str-length($b); )

Yang terakhir, tetapi tidak kurang pentingnya, kita dapat membina fungsi menyusun kita. Pelaksanaan yang paling cekap (yang dapat disalurkan ke Sass) adalah algoritma jenis cepat.

/// Quick sort /// @author Hugo Giraudel /// @param (List) $list - list to sort /// @param (List) $order ($default-order) - order to use for sorting /// @return (List) /// @require (function) _str-compare /// @require $default-order @function quick-sort($list, $order: $default-order) ( $less: (); $equal: (); $large: (); @if length($list) > 1 ( $seed: nth($list, ceil(length($list) / 2)); @each $item in $list ( @if $item == $seed ( $equal: append($equal, $item, list-separator($list)); ) @else if _str-compare($item, $seed, $order) ( $less: append($less, $item, list-separator($list)); ) @else if not _str-compare($item, $seed, $order) ( $large: append($large, $item, list-separator($list)); ) ) @return join(join(quick-sort($less, $order), $equal), quick-sort($large, $order)); ) @return $list; )

Sekiranya anda berminat untuk membuat fungsi seperti itu, lihatlah algoritma Implementing Bubble Sort dengan Sass di The Sass Way.