You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

从文件读取数字:如何仅保存唯一值到数组并获取其长度?

从文件提取唯一数字并统计数量的实现方案

嘿,咱们一步步来解决这个问题!你需要从文件里读取数字,只把不重复的存入数组,还要拿到这些唯一数字的总数供后续代码调用。下面是清晰的实现思路和常见语言的代码示例:

核心逻辑拆解

不管用什么编程语言,核心步骤都是这三步:

  • 读取文件数字:按文件格式(每行一个、逗号分隔等)读取所有数字,处理格式转换
  • 去重并存储:用一个集合记录已出现的数字,遍历读取到的数字,只把未出现过的加入目标数组
  • 获取唯一数量:直接取目标数组的长度,就是唯一数字的总数

Python 实现示例

假设你的文件numbers.txt是每行一个数字的格式,比如:

1
2
3
2
5
1

1. 读取文件数字

先把文件里的数字全部读取出来,同时处理无效内容:

# 读取文件中的数字,处理换行符和类型转换
raw_numbers = []
with open('numbers.txt', 'r', encoding='utf-8') as file:
    for line in file:
        # 去除首尾空白(包括换行符),转换为整数(浮点数用float)
        try:
            num = int(line.strip())
            raw_numbers.append(num)
        except ValueError:
            # 跳过非数字内容,避免程序崩溃
            print(f"跳过无效内容:{line.strip()}")

2. 去重并获取结果

这里提供两种方案,按需选择:

方案一:快速去重(不保留原始顺序)

用Python的集合自动去重,效率很高,但会打乱数字的原始出现顺序:

unique_numbers = list(set(raw_numbers))
unique_count = len(unique_numbers)

print(f"唯一数字总数:{unique_count}")
print(f"唯一数字数组:{unique_numbers}")

方案二:保留原始顺序的去重

如果需要保持数字第一次出现的顺序,用遍历+集合记录的方式:

unique_numbers = []
seen_numbers = set()

for num in raw_numbers:
    if num not in seen_numbers:
        seen_numbers.add(num)
        unique_numbers.append(num)

unique_count = len(unique_numbers)
print(f"唯一数字总数:{unique_count}")
print(f"唯一数字数组(按出现顺序):{unique_numbers}")

Java 实现示例

如果用Java开发,思路是一样的,用HashSet记录已出现的数字,ArrayList存储唯一数字:

import java.io.File;
import java.io.FileNotFoundException;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.Scanner;

public class UniqueNumberProcessor {
    public static void main(String[] args) {
        ArrayList<Integer> uniqueNumbers = new ArrayList<>();
        HashSet<Integer> seenNumbers = new HashSet<>();

        // 读取文件并处理数字
        try (Scanner scanner = new Scanner(new File("numbers.txt"))) {
            while (scanner.hasNextInt()) {
                int num = scanner.nextInt();
                if (!seenNumbers.contains(num)) {
                    seenNumbers.add(num);
                    uniqueNumbers.add(num);
                }
            }
        } catch (FileNotFoundException e) {
            System.err.println("找不到目标文件:" + e.getMessage());
        }

        // 输出结果
        int uniqueCount = uniqueNumbers.size();
        System.out.println("唯一数字总数:" + uniqueCount);
        System.out.println("唯一数字数组:" + uniqueNumbers);
    }
}

注意事项

  • 格式兼容:如果文件是逗号/空格分隔的数字,需要调整读取逻辑(比如Python用split()分割每行内容)
  • 异常处理:一定要处理文件不存在、非数字内容等异常情况,避免程序崩溃
  • 大文件优化:如果文件非常大,建议逐行读取处理,不要一次性加载全部内容到内存中

内容的提问来源于stack exchange,提问作者Daniela Gocheva

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 09:17:25