如何在 TypeScript 中排序二维数组?


在 TypeScript 中,二维数组是一个数组的数组,其中每个内部数组表示二维数组的一行。您可以使用方括号表示法访问数组的单个元素,行索引和列索引用逗号分隔。一维数组可以存储任何数据类型的值,例如字符串、数字、对象等。

要对 TypeScript 中的二维数组进行排序,您可以使用sort()方法以及自定义比较函数。sort()方法将比较函数作为可选参数,比较函数应接收两个参数 a 和 b,它们分别表示要比较的两个元素。如果 a 在 b 之前,比较函数应返回负数;如果 a 在 b 之后,则返回正数;如果 a 和 b 相同,则返回 0。

开发过程中经常需要根据特定条件对二维数组的值进行排序。因此,我们将在下面学习如何按行和按列对二维数组进行排序。

使用 array.sort() 方法按行排序二维数组

通常,我们使用 Array 类的 sort() 方法对数组进行排序,而不是创建自定义算法(如归并排序或快速排序)。sort() 方法的实现具有比其他排序算法更低的时空复杂度。

语法

要按行排序二维数组,我们必须将包含排序条件的回调函数作为 sort() 方法的参数传递。用户可以按照以下语法按行排序二维数组。

let arr: Array<Array<number>> = [];
for (let i = 0; i < arr.length; i++) {
   arr[i].sort( (a, b) => {
      if (first === second) {
         return 0;
      } else {
         if (first < second) {
            return -1;
         }
         return 1;
      }
   });
}

在上述语法中,我们遍历数组的每一行,并分别对每一行进行排序。在 array.sort() 方法中,传递了回调函数,该函数返回 0、-1 和 1 以相应地对数字进行排序。

算法

步骤 1 - 创建名为“arr”的数字类型数组。

步骤 2 - 遍历矩阵的每一行,分别对每一行进行排序。

步骤 3 - 对每一行调用 sort() 方法。

步骤 4 - 将回调函数作为 sort() 方法的参数传递,该函数将行的两个值作为参数。

步骤 5 - 在比较两个参数值以按升序或降序对它们进行排序后,从回调函数返回零、正数和负数。

示例

在下面的示例中,我们创建了数字的二维数组并向其中添加了一些数字。我们使用 sort() 方法对每一行进行排序,回调函数根据其参数值的相等性返回 0、-1 和 1。

//  Creating the array of numbers and inserting the values
let arr: Array<Array<number>> = [];
arr.push([0, 4, 67, 32, 21, 11]);
arr.push([56, 43, 32, 21, 45, 56]);
arr.push([8, 98, 78, 41, 1, 2]);
arr.push([3, 87, 8, 5, 4, 21]);
// Sort every row seprately
for (let i = 0; i < arr.length; i++) {
   arr[i].sort(sort_callback);
}
// Callback function for the sort method, which returns the numbers
function sort_callback(first: number, second: number): number {
   // If both number is equal, return 0. It means, it will not change position of numbers
   if (first === second) {
      return 0;
   } else {
      // If first number is smaller, return -1, It will also not swap numbers
      if (first < second) {
         return -1;
      }
      //  If first number is larger than second number, return 1 to swap both numbers.
      return 1;
   }
}
// Print the array
console.log("Array after sorting row-wise:");
console.log(" ");
console.log(arr);

编译后,它将生成以下 JavaScript 代码 -

//  Creating the array of numbers and inserting the values
var arr = [];
arr.push([0, 4, 67, 32, 21, 11]);
arr.push([56, 43, 32, 21, 45, 56]);
arr.push([8, 98, 78, 41, 1, 2]);
arr.push([3, 87, 8, 5, 4, 21]);
// Sort every row seprately
for (var i = 0; i < arr.length; i++) {
   arr[i].sort(sort_callback);
}
// Callback function for the sort method, which returns the numbers
function sort_callback(first, second) {
   // If both number is equal, return 0. It means, it will not change position of numbers
   if (first === second) {
      return 0;
   }
   else {
      // If first number is smaller, return -1, It will also not swap numbers
      if (first < second) {
         return -1;
      }
      //  If first number is larger than second number, return 1 to swap both numbers.
      return 1;
   }
}
// Print the array
console.log("Array after sorting row-wise:");
console.log(" ");
console.log(arr);

输出

以上代码将产生以下输出 -

Array after sorting row-wise:
[ [ 0, 4, 11, 21, 32, 67 ],
   [ 21, 32, 43, 45, 56, 56 ],
   [ 1, 2, 8, 41, 78, 98 ],
   [ 3, 4, 5, 8, 21, 87 ] ]

在上述输出中,用户可以观察到所有行都是分别排序的。

使用 array.sort() 方法按列排序二维数组

在上一部分中,我们学习了如何按行排序数组。现在,我们将学习如何按列排序数组。按列排序意味着我们将根据任何特定数组列对二维数组的行进行排序或交换。

语法

用户可以按照以下语法按列排序二维数组。

let arr: Array<Array<number>> = [];
arr.sort( (
   firstRow: Array<number>,
   secondRow: Array<number>
): number => {
   if (firstRow[2] === secondRow[2]) {
      return 0;
   } else {
      if (firstRow[2] < secondRow[2]) {
         return -1;
      }
      return 1;
   }
}

在上述语法中,我们使用了 array.sort() 方法并将箭头函数作为回调传递。箭头函数根据特定列的值返回正值和负值,sort() 方法相应地对数组进行排序。

示例

根据第 3 列排序数组

下面的示例中使用 sort() 方法按列对二维数组进行排序。sort() 方法的回调函数根据作为回调函数参数传递的任何两行的第三个元素的比较返回零、正数和负数。

//  Creating the array and initialize it with values
let arr: Array<Array<number>> = [
   [0, 4, 67, 32, 21, 11],
   [56, 43, 32, 21, 45, 56],
   [8, 98, 78, 41, 1, 2],
   [3, 87, 8, 5, 4, 21],
];
arr.sort(sort_columnWise);

// Callback function to sort array according to the third column.
// If callback function will return 1, sort() method swap the row, Otherwise not.
function sort_columnWise(
   firstRow: Array<number>,
   secondRow: Array<number>
): number {
   if (firstRow[2] === secondRow[2]) {
      return 0;
   } else {
      if (firstRow[2] < secondRow[2]) {
         return -1;
      }

      return 1;
   }
}
// Print the array
console.log("Array after sorting according 3rd column:");
console.log(" ");
console.log(arr);

编译后,它将生成以下 JavaScript 代码 -

//  Creating the array and initialize it with values
var arr = [
   [0, 4, 67, 32, 21, 11],
   [56, 43, 32, 21, 45, 56],
   [8, 98, 78, 41, 1, 2],
   [3, 87, 8, 5, 4, 21],
];
arr.sort(sort_columnWise);
// Callback function to sort array according to the third column.
// If callback function will return 1, sort() method swap the row, Otherwise not.
function sort_columnWise(firstRow, secondRow) {
   if (firstRow[2] === secondRow[2]) {
      return 0;
   }
   else {
      if (firstRow[2] < secondRow[2]) {
         return -1;
      }
      return 1;
   }
}
// Print the array
console.log("Array after sorting according 3rd column:");
console.log(" ");
console.log(arr);

输出

以上代码将产生以下输出 -

Array after sorting according 3rd column:
[ [ 3, 87, 8, 5, 4, 21 ],
   [ 56, 43, 32, 21, 45, 56 ],
   [ 0, 4, 67, 32, 21, 11 ],
   [ 8, 98, 78, 41, 1, 2 ] ]

在输出中,用户可以观察到所有行都是根据**第三列**的值排序的。

示例

在下面的示例中,我们创建了一个对象数组,其中包含姓名和加入年份作为员工数据。我们对数组使用 sort() 方法,并根据作为回调函数参数传递的第一和第二个对象的年份之间的差异对所有对象进行排序。

let employee_Data: Array<{ name: string; joinedYear: number }> = [
   { name: "Shubham", joinedYear: 2019 },
   { name: "Jems", joinedYear: 2021 },
   { name: "Bond", joinedYear: 2022 },
   { name: "Akshay", joinedYear: 2017 },
   { name: "sulabh", joinedYear: 2012 },
];
// Sort array of objects according to joinedyear property of the object
employee_Data.sort((first, second) => {
   // return 0, positive, or negative value according to difference of the year
   // If difference is positive, sort() method will swap the objects, otherwise not.
   // If users want to sort array in the decreasing order, just return second.joinedYear - first.joinedYear
   return first.joinedYear - second.joinedYear;
});

// Print the array
console.log("Array after sorting according joindedYear:");
console.log(" ");
console.log(employee_Data);

编译后,它将生成以下 JavaScript 代码 -

var employee_Data = [
   { name: "Shubham", joinedYear: 2019 },
   { name: "Jems", joinedYear: 2021 },
   { name: "Bond", joinedYear: 2022 },
   { name: "Akshay", joinedYear: 2017 },
   { name: "sulabh", joinedYear: 2012 },
];
// Sort array of objects according to joinedyear property of the object
employee_Data.sort(function (first, second) {
   // return 0, positive, or negative value according to difference of the year
   // If difference is positive, sort() method will swap the objects, otherwise not.
   // If users want to sort array in the decreasing order, just return second.joinedYear - first.joinedYear
   return first.joinedYear - second.joinedYear;
});
// Print the array
console.log("Array after sorting according joindedYear:");
console.log(" ");
console.log(employee_Data);

输出

以上代码将产生以下输出 -

Array after sorting according joindedYear:
[ { name: 'sulabh', joinedYear: 2012 },
   { name: 'Akshay', joinedYear: 2017 },
   { name: 'Shubham', joinedYear: 2019 },
   { name: 'Jems', joinedYear: 2021 },
   { name: 'Bond', joinedYear: 2022 } ]

更新于:2022-12-19

4K+ 浏览量

开启你的职业生涯

通过完成课程获得认证

开始学习
广告

© . All rights reserved.