SASS 中的排序功能
任何排序函数的主要功能是能够比较两个字符串,并检查两个字符串中的哪一个必须在另一个之前。几乎每种编程语言都有一些内置的排序函数,但是要在 Sass 中做到这一点,您需要创建自己的字符串比较函数。第一步,我们需要教 Sass,根据每个字符串包含的字符对字符串进行排序的正确顺序。我们用一个变量来实现。
$sort-order: 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;
这将用于声明以 a 开头的字符串应该出现在以 b 或 c 开头的字符串之前,以此类推。您还可以添加其他值,如数字、大写字母或符号。 现在,你需要一个比较功能。在比较函数中,我们基本上遍历每个字符串中的字符,并在 Sass index() 函数的帮助下,在排序列表中查找它们的顺序。它会给我们两个可以比较的值,其中一个在另一个之前。如果值相同,我们将循环下一组字符,以此类推。 如果$string-a 在$string-b 之前,则 str-compare() 函数返回 true,否则返回 false。
@function compare($string-a, $string-b, $sort-order) {
$string-a: to-lower-case($string-a + unquote(""));
$string-b: to-lower-case($string-b + unquote(""));
@for $i from 1 through min(
str-length($string-a), str-length($string-b)) {
$char-a: str-slice($string-a, $i, $i);
$char-b: str-slice($string-b, $i, $i);
@if $char-a and $char-b and index(
$order, $char-a) != index($sort-order, $char-b) {
@return index(
$sort-order, $char-a) < index($sort-order, $char-b);
}
}
@return str-length($string-a) < str-length($string-b);
}
这里,我们将使用冒泡排序算法进行排序,因为这是最基本和最简单的方法。由于冒泡排序是基于交换数组或列表中的两个值,我们还需要一个交换()函数。 swap()函数将一个列表和两个索引值作为输入。需要在列表中交换索引值。 我们将使用 set-nth() 函数,因为它只是更新列表,而不是创建新列表。
@function swap($list, $index-a, $index-b) {
@if abs($index-a) > length($list) or
abs($index-b) > length($list) {
@return $list;
}
$temp: nth($list, $index-a);
$list: set-nth($list, $index-a, nth($list, $index-b));
$list: set-nth($list, $index-b, $temp);
@return $list;
}
现在,我们有了一个 compare() 函数和一个 swap() 函数,这意味着我们已经准备好创建我们的 sort() 函数。该函数只是循环遍历列表,相互比较项目,并将它们交换一次,直到列表完全排序。
@function sort($list, $sort-order) {
@for $i from 1 through length($list) {
@for $j from $i * -1 through -1 {
$j: abs($j);
@if $j > 1 and compare(nth($list, $j),
nth($list, $j - 1), $sort-order) {
$list: swap($list, $j, $j - 1);
}
}
}
@return $list;
}
最后,我们需要传递字符串值并返回 sort()函数。
$list: internships placements classes geeksforgeeks courses;
$sort: sort($list);
输出:
classes courses geeksforgeeks internships placements
版权属于:月萌API www.moonapi.com,转载请注明出处