返回

数组去重宝典:12种方案斩获面试官芳心

前端

引言:数组去重,面试官的偏爱

在软件开发的面试中,数组去重往往是一个必问的问题。这不仅因为它是一个基础而实用的算法,而且它还可以考察应聘者的编程思维和对语言的熟练程度。本文将从12种主流编程语言的角度,详细介绍数组去重的实现方案,让您在面试中应对自如,脱颖而出。

1. JavaScript:简洁而强大的数组去重

// 方案一:使用Set对象
const array = [1, 2, 3, 4, 5, 1, 2, 3];
const uniqueArray = [...new Set(array)];

// 方案二:使用filter()方法
const uniqueArray = array.filter((item, index) => array.indexOf(item) === index);

// 方案三:使用reduce()方法
const uniqueArray = array.reduce((acc, item) => {
  if (!acc.includes(item)) {
    acc.push(item);
  }
  return acc;
}, []);

2. Python:优雅而全面的数组去重

# 方案一:使用set()函数
array = [1, 2, 3, 4, 5, 1, 2, 3]
unique_array = set(array)

# 方案二:使用collections.Counter()类
from collections import Counter
unique_array = list(Counter(array).keys())

# 方案三:使用itertools.groupby()函数
import itertools
unique_array = [key for key, group in itertools.groupby(array)]

3. Java:稳健而可靠的数组去重

// 方案一:使用HashSet类
Set<Integer> set = new HashSet<>();
for (int num : array) {
  set.add(num);
}
Integer[] uniqueArray = set.toArray(new Integer[0]);

// 方案二:使用LinkedHashSet类
Set<Integer> set = new LinkedHashSet<>();
for (int num : array) {
  set.add(num);
}
Integer[] uniqueArray = set.toArray(new Integer[0]);

// 方案三:使用Arrays.stream()方法
Integer[] uniqueArray = Arrays.stream(array).distinct().toArray();

4. C++:高效而灵活的数组去重

// 方案一:使用set容器
set<int> set;
for (int num : array) {
  set.insert(num);
}
vector<int> uniqueArray(set.begin(), set.end());

// 方案二:使用unordered_set容器
unordered_set<int> set;
for (int num : array) {
  set.insert(num);
}
vector<int> uniqueArray(set.begin(), set.end());

// 方案三:使用lambda表达式和sort()函数
sort(array.begin(), array.end());
auto last = unique(array.begin(), array.end());
vector<int> uniqueArray(array.begin(), last);

5. PHP:实用而便捷的数组去重

// 方案一:使用array_unique()函数
$array = [1, 2, 3, 4, 5, 1, 2, 3];
$uniqueArray = array_unique($array);

// 方案二:使用array_filter()函数
$uniqueArray = array_filter($array, function($value, $key) {
  return array_search($value, $array) === $key;
});

// 方案三:使用SplFixedArray类
$set = new SplFixedArray(count($array));
foreach ($array as $value) {
  $set->add($value);
}
$uniqueArray = $set->toArray();

6. Ruby:优雅而简洁的数组去重

# 方案一:使用uniq()方法
array = [1, 2, 3, 4, 5, 1, 2, 3]
unique_array = array.uniq

# 方案二:使用select()方法
unique_array = array.select { |item| array.index(item) == array.rindex(item) }

# 方案三:使用Set类
unique_array = Set.new(array).to_a

7. Swift:现代而强大的数组去重

// 方案一:使用Set类型
var array = [1, 2, 3, 4, 5, 1, 2, 3]
var uniqueArray = Set(array)

// 方案二:使用filter()方法
uniqueArray = array.filter { array.firstIndex(of: $0) == array.lastIndex(of: $0) }

// 方案三:使用reduce()方法
uniqueArray = array.reduce(into: Set<Int>()) { $0.insert($1) }

8. Go:简洁而高效的数组去重

// 方案一:使用make()函数和map
array := []int{1, 2, 3, 4, 5, 1, 2, 3}
uniqueArray := make(map[int]bool)
for _, num := range array {
  uniqueArray[num] = true
}
var result []int
for num, _ := range uniqueArray {
  result = append(result, num)
}

// 方案二:使用set包
import "golang.org/x/exp/slices"
array := []int{1, 2, 3, 4, 5, 1, 2, 3}
uniqueArray := slices.Compact(array)

// 方案三:使用sort包和unique()函数
import "sort"
array := []int{1, 2, 3, 4, 5, 1, 2, 3}
sort.Ints(array)
uniqueArray := unique(array)

9. C#:清晰而全面的数组去重

// 方案一:使用HashSet类
int[] array = { 1, 2, 3, 4, 5, 1, 2, 3 };
HashSet<int> set = new HashSet<int>();
foreach (int num in array) {
  set.Add(num);
}
int[] uniqueArray = set.ToArray();

// 方案二:使用Linq的Distinct()方法
int[] uniqueArray = array.Distinct().ToArray();

// 方案三:使用lambda表达式和GroupBy()方法
int[] uniqueArray = array.GroupBy(x => x).Select(g => g.Key).ToArray();

10. VB.NET:实用而易用的数组去重

' 方案一:使用HashSet类
Dim array As Integer() = {1, 2, 3, 4, 5, 1, 2, 3}
Dim set As New HashSet(Of Integer)
For Each num In array
  set.Add(num)
Next
Dim uniqueArray As Integer() = set.ToArray()

' 方案二:使用Linq的Distinct()方法
Dim uniqueArray As Integer() = array.Distinct().ToArray()

' 方案三:使用lambda表达式和GroupBy()方法
Dim uniqueArray As Integer() = array.GroupBy(Function(x) x).Select(Function(g) g.Key).ToArray()

11. SQL:灵活而强大的数组去重

-- 方案一:使用DISTINCT
SELECT DISTINCT column_name
FROM table_name;

-- 方案二:使用GROUP BY关键字
SELECT column_name
FROM table_name
GROUP BY column_name;

-- 方案三:使用窗口函数ROW_NUMBER()
SELECT column_name
FROM (
  SELECT column_name, ROW_NUMBER() OVER (PARTITION BY column_name ORDER BY column_name) AS rn
  FROM table_name
) AS t
WHERE rn = 1;

总结:千变万化,殊途同归

通过对12种主流编程语言的数组去重方案进行详细介绍,我们看到了不同语言的独特之处和相似之处。无论哪种语言,数组去重的本质都是通过某种方式来过滤重复的元素,从而得到一个不包含重复元素的新数组。

对于初学者来说,掌握一种或