【Flutter 开发实战】Dart 基础篇:List 详解

news2025/4/21 22:05:18

在这里插入图片描述

嗨,各位朋友们,欢迎来到这篇博客!今天我们将一起踏入 Dart 语言的神奇世界,深入了解 Dart 中的 List 类型。不用担心,我会尽可能用最通俗易懂的语言,让你对 List 有一个更深刻的理解。

Dart 中的 List

List - 让数据变得有趣!

在 Dart 语言中,List 就像一个神奇的盒子,可以放进去各种各样的东西,比如数字、文字,甚至是其他盒子(List)!今天,我们就来揭开 List 的神秘面纱,看看它是如何让数据变得有趣的。

在这里插入图片描述

// 创建一个充满数字的盒子
List<int> numbers = [1, 2, 3, 4, 5];

// 创建一个装满水果的盒子
List<String> fruits = ['apple', 'banana', 'orange'];

咦,看起来好像挺简单的吧?方括号里面放东西,逗号分隔,就是一个 List 了!

List 的小魔法

获取盒子的长度
List<int> numbers = [1, 2, 3, 4, 5];
int length = numbers.length;

print('盒子里有多少东西呢?答案是:$length 个!'); // 输出:盒子里有多少东西呢?答案是:5 个!

嘿,这个 length 就像是盒子的秘密标签,告诉你里面到底有多少东西。

拿出盒子里的东西
List<String> fruits = ['apple', 'banana', 'orange'];
String firstFruit = fruits[0];

print('盒子里的第一样东西是什么呢?是:$firstFruit'); // 输出:盒子里的第一样东西是什么呢?是:apple

哎呀,索引就像是盒子的小抽屉,从 0 开始,想拿出哪个就说出它的位置,比如 fruits[0] 就是拿出第一个水果。

往盒子里加新东西
List<String> fruits = ['apple', 'banana', 'orange'];
fruits.add('grape');

print('往盒子里加了一颗葡萄,现在是这样的:$fruits'); // 输出:往盒子里加了一颗葡萄,现在是这样的:[apple, banana, orange, grape]

fruits 盒子里原本有 apple、banana、orange,来了一颗新水果 grape,用 add 方法就能轻松加入盒子。

从盒子里拿掉东西
List<String> fruits = ['apple', 'banana', 'orange'];
fruits.remove('banana');

print('把香蕉拿出去了,盒子里现在是这样的:$fruits'); // 输出:把香蕉拿出去了,盒子里现在是这样的:[apple, orange]

remove 方法,就像把盒子里的东西拿出来一样,轻松又方便。

盒子漫游之遍历

遍历就像是打开盒子,逐个看看里面有什么,这可是盒子漫游的时刻!

for 循环遍历
List<int> numbers = [1, 2, 3, 4, 5];
for (int number in numbers) {
  print('这个数字是啥呢?是:$number');
}

for 循环,一个个数字出来亮相,好像数字们在做小秀一样。

forEach 方法遍历
List<String> fruits = ['apple', 'banana', 'orange'];
fruits.forEach((fruit) {
  print('这个水果是啥呢?是:$fruit');
});

forEach 方法更简单,像是盒子里的每个东西都过来和你打招呼,一点都不会掉队。

不得不说,List 可真是个有趣的小伙伴,让我们的数据变得生动起来!

List 的小秘密

在 Dart 的舞台上,List 扮演着一个神奇的角色,但在使用它的过程中,可能会遇到一些小问题。让我们一一解决这些谜题吧!

如何判断 List 是否为空?
List<String> fruits = [];
if (fruits.isEmpty) {
  print('哎呀,水果盒子空空如也!');
} else {
  print('水果盒子里有${fruits.length}种水果哦!');
}

通过 isEmpty 属性,我们可以轻松地判断 List 是否为空,就像翻开水果盒子看看里面有没有惊喜。

如何查找 List 中的最大值和最小值?
List<int> numbers = [10, 5, 8, 15, 3];
int maxNumber = numbers.reduce((value, element) => value > element ? value : element);
int minNumber = numbers.reduce((value, element) => value < element ? value : element);

print('最大值是:$maxNumber,最小值是:$minNumber');

通过使用 reduce 方法,我们可以像找宝藏一样,找到 List 中的最大值和最小值。

List 的进阶冒险

现在,让我们进入一些高级的 List 冒险,让你的 Dart 旅程更加丰富多彩。

使用 map 转换 List 中的元素
List<int> numbers = [1, 2, 3, 4, 5];
List<int> squaredNumbers = numbers.map((number) => number * number).toList();

print('原始数字列表:$numbers');
print('每个数字的平方列表:$squaredNumbers');

map 方法就像是 List 的魔法师,可以将每个元素进行转换,创造出一个全新的 List。

使用 where 过滤 List 中的元素
List<int> numbers = [1, 2, 3, 4, 5];
List<int> evenNumbers = numbers.where((number) => number % 2 == 0).toList();

print('原始数字列表:$numbers');
print('偶数列表:$evenNumbers');

where 方法就像是一位聪明的导游,可以根据你的喜好,为你筛选出特定的元素。

使用 sort 对 List 进行排序
List<int> numbers = [3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5];
numbers.sort();

print('排序后的数字列表:$numbers');

sort 方法就像是整理房间,可以按照顺序排列,让一切井然有序。

使用 contains 判断 List 是否包含某个元素
List<String> fruits = ['apple', 'banana', 'orange'];
bool containsBanana = fruits.contains('banana');

if (containsBanana) {
  print('水果盒子里有香蕉哦!');
} else {
  print('水果盒子里没有香蕉。');
}

contains 方法就像是查找宝藏的探险者,可以告诉你是否在 List 中找到了特定的元素。

List 的奇妙嵌套

在 Dart 的舞台上,List 可以变得更加神奇,通过嵌套,你可以创建更复杂的数据结构。

在这里插入图片描述

List<List<int>> matrix = [
  [1, 2, 3],
  [4, 5, 6],
  [7, 8, 9],
];

print('矩阵的第二行:${matrix[1]}');

这就像是在盒子里装盒子,通过嵌套,我们可以创建出更有趣的数据结构。

使用 List 的小心事项

在使用 List 的冒险中,一些小心事项也需要我们注意。

List 是可变的

在 Dart 中,List 是一位非常随和的小伙伴,你可以随时添加、删除或修改其中的元素。但别忘了,有时候要小心,避免意外发生。

List<int> numbers = [1, 2, 3, 4, 5];
numbers[0] = 10;

print('修改后的数字列表:$numbers');

通过索引,我们可以直接修改 List 中的元素值,就像给小伙伴们换了新衣服一样。

避免空指针异常

在冒险的过程中,千万要确保不要走进“越界”的陷阱,以免出现空指针异常。

List<String> fruits = ['apple', 'banana', 'orange'];

if (fruits.length > 2) {
  print('第三个水果是:${fruits[2]}');
} else {
  print('水果盒子里没有第三个水果。');
}

在这个例子中,我们先判断盒子的大小,再去取第三个元素,确保一切安全。

Dart 中 List 的其他花样

除了上面的操作,List 在 Dart 中还有更多花样,比如在函数中传递多个参数、实现队列和栈等。

使用 List 传递多个参数
void printNumbers(List<int> numbers) {
  for (int number in numbers) {
    print(number);
  }
}

printNumbers([1, 2, 3, 4, 5]);

通过将参数声明为 List 类型,我们可以方便地一次传递多个值给函数,就像给朋友送上一箱好吃的糖果。

实现队列和栈
// 队列(先进先出)
Queue<int> queue = Queue();
queue.addAll([1, 2, 3, 4, 5]);

int firstElement = queue.removeFirst();
print('队列的第一个元素是:$firstElement');

// 栈(后进先出)
List<int> stack = [];
stack.addAll([1, 2, 3, 4, 5]);

int lastElement = stack.removeLast();
print('栈的最后一个元素是:$lastElement');

通过使用 Dart 中的 Queue 类和 List 的 removeFirstremoveLast 方法,我们可以模拟队列和栈的玩法,就像在玩游戏一样。

在 Dart 的大舞台上,List 是个多才多艺的演员,有了这些花样,你就能更自如地编写出丰富多彩的代码了!

List 魔法手册

在 Dart 的大舞台上,List 扮演着一个强大而灵活的角色。上面的部分我们介绍了 Dart 中 List 的常见用法,但在 Dart 中还有其它的一些属性和用法,接下来,就让我们一起来总结 List 的一些神奇属性和方法吧!

List 常用属性:

属性描述
length获取 List 的长度
reversed翻转 List 中的元素
isEmpty判断 List 是否为空
isNotEmpty判断 List 是否不为空
1. length - 长度

length 属性用于获取 List 的长度,即 List 中元素的个数。

List<int> numbers = [1, 2, 3, 4, 5];
int length = numbers.length;

print('List 的长度是:$length'); // 输出:List 的长度是:5

这个属性非常简单,但在很多场景中都是必不可少的。

2. reversed - 翻转

reversed 属性用于将 List 中的元素翻转。

List<int> numbers = [1, 2, 3, 4, 5];
List<int> reversedNumbers = numbers.reversed.toList();

print('翻转后的数字列表:$reversedNumbers');

这样我们就能得到一个反向排列的 List。

3. isEmpty - 是否为空

isEmpty 属性用于判断 List 是否为空,返回一个布尔值。

List<String> fruits = [];
if (fruits.isEmpty) {
  print('水果列表为空!');
} else {
  print('水果列表不为空,有${fruits.length}种水果。');
}

这是一个常见的判断,以避免在空列表上执行不必要的操作。

4. isNotEmpty - 是否不为空

相应地,isNotEmpty 属性则判断 List 是否不为空,也返回一个布尔值。

List<String> fruits = ['apple', 'banana', 'orange'];
if (fruits.isNotEmpty) {
  print('水果列表不为空,有${fruits.length}种水果。');
} else {
  print('水果列表为空!');
}

这两个属性在条件判断中经常被用到。

List 常用方法:

方法描述
add向 List 的末尾添加一个元素
addAll将一个 List 中的所有元素添加到另一个 List 的末尾
indexOf查找 List 中某个特定值的索引,如果未找到则返回 -1
remove删除 List 中指定值的第一个匹配项
removeAt删除 List 中指定索引位置的元素
fillRange修改 List 中一定范围内的元素值
insert在 List 的指定位置插入一个元素
insertAll在 List 的指定位置插入另一个 List 中的所有元素
toList将其他类型的集合转换为 List
join将 List 中的元素连接成一个字符串,可以指定连接符
split将一个字符串按照指定的分隔符拆分成 List
forEach遍历 List 中的每个元素,对每个元素执行指定的操作
map对 List 中的每个元素执行指定的操作,并返回一个新的 List
where根据指定的条件过滤 List 中的元素,返回一个新的 List
any检查 List 中是否至少有一个元素满足指定的条件,返回一个布尔值
every检查 List 中是否所有元素都满足指定的条件,返回一个布尔值
1. add - 增加

add 方法用于向 List 的末尾添加一个元素。

List<String> fruits = ['apple', 'banana', 'orange'];
fruits.add('grape');

print('添加葡萄后的水果列表:$fruits');

这是一个简单而常见的操作,用于动态地向 List 中添加元素。

2. addAll - 拼接数组

addAll 方法用于将一个 List 中的所有元素添加到另一个 List 的末尾。

List<int> numbers1 = [1, 2, 3];
List<int> numbers2 = [4, 5, 6];
numbers1.addAll(numbers2);

print('拼接后的数字列表:$numbers1');

这是一个很方便的方法,可以将两个 List 合并成一个。

3. indexOf - 查找

indexOf 方法用于查找 List 中某个特定值的索引,如果未找到则返回 -1。

List<String> fruits = ['apple', 'banana', 'orange'];
int indexOfBanana = fruits.indexOf('banana');

print('香蕉的索引是:$indexOfBanana'); // 输出:香蕉的索引是:1

通过这个方法,我们可以迅速找到某个元素在 List 中的位置。

4. remove - 删除

remove 方法用于删除 List 中指定值的第一个匹配项。

List<String> fruits = ['apple', 'banana', 'orange'];
fruits.remove('banana');

print('去掉香蕉后的水果列表:$fruits');

使用这个方法可以轻松地从 List 中移除指定的元素。

5. removeAt - 删除

removeAt 方法用于删除 List 中指定索引位置的元素。

List<String> fruits = ['apple', 'banana', 'orange'];
fruits.removeAt(1);

print('去掉索引为1的水果后的水果列表:$fruits');

这个方法对于根据索引值删除元素非常有用。

6. fillRange - 修改

fillRange 方法用于修改 List 中一定范围内的元素值。

List<int> numbers = [1, 2, 3, 4, 5];
numbers.fillRange(1, 3, 10);

print('修改范围后的数字列表:$numbers');

这个方法让我们可以在 List 中指定范围内进行批量修改。

7. insert - 指定位置插入

insert 方法用于在 List 的指定位置插入一个元素。

List<String> fruits = ['apple', 'banana', 'orange'];
fruits.insert(1, 'grape');

print('在索引1处插入葡萄后的水果列表:$fruits');

通过这个方法,我们可以灵活地在 List 中的任意位置插入元素。

8. insertAll - 指定位置插入 List

insertAll 方法用于在 List 的指定位置插入另一个 List 中的所有元素。

List<String> fruits = ['apple', 'banana', 'orange'];
fruits.insertAll(1, ['grape', 'kiwi']);

print('在索引1处插入葡萄和猕猴桃后的水果列表:$fruits');

这个方法对于批量插入元素非常方便。

9. toList - 其他类型转换成 List

toList 方法用于将其他类型的集合(如 Set)转换为 List。

Set<int> uniqueNumbers = {1, 2, 3, 4, 5};
List<int> numbersList = uniqueNumbers.toList();

print('Set 转换成 List 后的数字列表:$numbersList');

这个方法对于在不同集合类型之间进行转换很有用。

10. join - List 转换成字符串

join 方法用于将 List 中的元素连接成一个字符串,可以指定连接符。

List<String> fruits = ['apple', 'banana', 'orange'];
String fruitString = fruits.join(', ');

print('水果列表转换成字符串:$fruitString');

通过这个方法,我们可以方便地将 List 转换为可读性更好的字符串。

11. split - 字符串转化成 List

split 方法用于将一个字符串按照指定的分隔符拆分成 List。

String fruitsString = 'apple,banana,orange';
List<String> fruitsList = fruitsString.split(',');

print('字符串转换成水果列表:$fruitsList');

这个方法在处理从文件或网络获取的逗号分隔的数据时非常实用。

12. forEach

forEach 方法用于遍历 List 中的每个元素,对每个元素执行指定的操作。

List<int> numbers = [1, 2, 3, 4, 5];
numbers.forEach((number) {
  print('当前数字是:$number');
});

这是一种简洁的方式来遍历 List。

13. map

map 方法用于对 List 中的每个元素执行指定的操作,并返回一个新的 List。

List<int> numbers = [1, 2, 3, 4, 5];
List<int> squaredNumbers = numbers.map((number) => number * number).toList();

print('原始数字列表:$numbers');
print('每个数字的平方列表:$squaredNumbers');

通过这个方法,我们可以方便地对 List 进行转换。

14. where

where 方法用于根据指定的条件过滤 List 中的元素,返回一个新的 List。

List<int> numbers = [1, 2, 3, 4, 5];
List<int> evenNumbers = numbers.where((number) => number % 2 == 0).toList();

print('原始数字列表:$numbers');
print('偶数列表:$evenNumbers');

这是一种强大的方法,可以根据需要筛选 List 中的元素。

15. any

any 方法用于检查 List 中是否至少有一个元素满足指定的条件,返回一个布尔值。

List<int> numbers = [1, 2, 3, 4, 5];
bool hasEvenNumber = numbers.any((number) => number % 2 == 0);

if (hasEvenNumber) {
  print('列表中有偶数。');
} else {
  print('列表中没有偶数。');
}

这个方法对于检查是否存在符合条件的元素很有用。

16. every

every 方法用于检查 List 中是否所有元素都满足指定的条件,返回一个布尔值。

List<int> numbers = [2, 4, 6, 8, 10];
bool allEvenNumbers = numbers.every((number) => number % 2 == 0);

if (allEvenNumbers) {
  print('列表中所有数字都是偶数。');
} else {
  print('列表中至少有一个不是偶数。');
}

这个方法对于检查是否所有元素都满足条件很有用。

结语

通过这篇博客,我们深入探讨了 Dart 中 List 的方方面面。从基本操作到高级应用,希望你现在对 Dart 中的 List 有了更清晰的认识。

  • 我们学习了如何创建、访问和操作 List。
  • 了解了如何遍历 List,并解决了一些常见问题。
  • 探讨了一些高级操作,包括转换、过滤和排序。
  • 知道了 List 可以嵌套,用于处理更复杂的数据结构。
  • 注意了在使用 List 时的一些小细节,避免了一些常见错误。

希望通过这篇博客,你对 Dart 中的 List 有了更深入的理解。在你的 Dart 之旅中,List 将是一个非常有力的工具,帮助你处理各种数据。加油,各位朋友们,愿你们在 Dart 的世界中越走越远!

作者信息

作者 : 繁依Fanyi
CSDN: https://techfanyi.blog.csdn.net
掘金:https://juejin.cn/user/4154386571867191

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1391481.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

重学Java 7 数组Arr.1

我欲与君相知&#xff0c;长命无绝衰 ——24.1.16 一、数组的定义 1.概述&#xff1a;数组是一个容器&#xff0c;数组本身属于引用数据类型 2.作用&#xff1a;一次存储多个数据 3.特点&#xff1a; ①既可以存储基本类型的数据&#xff0c;也可以存储引用类型的数据 ②定长&a…

Redis 消息队列和发布订阅

文章目录 基本模式生产者消费者原理&模型redis实现java实现 发布者订阅者原理&模型redis实现java实现 stream模式原理&模型工作原理redis实现Java实现 选型外传 基本模式 采用redis 三种方案&#xff1a; ● 生产者消费者&#xff1a;一个消息只能有一个消费者 ●…

计算机毕业设计 基于SSM的历史/博物馆藏系统的设计与实现 Java实战项目 附源码+文档+视频讲解

博主介绍&#xff1a;✌从事软件开发10年之余&#xff0c;专注于Java技术领域、Python人工智能及数据挖掘、小程序项目开发和Android项目开发等。CSDN、掘金、华为云、InfoQ、阿里云等平台优质作者✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精…

一天吃透计算机网络面试八股文

目录&#xff1a; 网络分层结构三次握手两次握手可以吗&#xff1f;四次挥手第四次挥手为什么要等待2MSL&#xff1f;为什么是四次挥手&#xff1f;TCP有哪些特点&#xff1f;说说TCP报文首部有哪些字段&#xff0c;其作用又分别是什么&#xff1f;TCP和UDP的区别&#xff1f;…

DWM1000 MAC层

DWM1000 MAC层 MAC层 概述 MAC层&#xff0c;即媒体访问控制层&#xff0c;是数据通信协议栈中的一个重要部分&#xff0c;位于链路层的下半部分&#xff0c;紧邻物理层。在OSI模型中&#xff0c;它属于第二层&#xff0c;即数据链路层的一部分。MAC层的主要职责是控制如何在…

去中心化社交:Web3如何重新定义社交媒体

随着区块链技术的快速发展&#xff0c;Web3正在崭露头角&#xff0c;成为社交媒体领域的一股新潮流。去中心化社交的理念与技术创新正在重新定义用户的社交体验&#xff0c;颠覆传统社交媒体的中心化模式。本文将深入探讨Web3对社交媒体的影响&#xff0c;以及去中心化社交是如…

Ubuntu使用QtCreator + CMake 开发C/C++程序

平台 OS: Ubuntu 20.04 cmake: 3.16.3 IDE: Qt Creator 4.11.1 Based on Qt 5.14.1 (GCC 5.3.1 20160406 (Red Hat 5.3.1-6), 64 bit) Built on Feb 5 2020 12:48:30 From revision b2ddeacfb5 Copyright 2008-2019 The Qt Company Ltd. All rights reserved. The program …

DC电源模块在新能源领域的应用前景

BOSHIDA DC电源模块在新能源领域的应用前景 DC电源模块在新能源领域有着广阔的应用前景。随着可再生能源技术的发展和普及&#xff0c;如太阳能和风能等的应用逐渐增多&#xff0c;DC电源模块在这些领域的应用越来越重要。 首先&#xff0c;DC电源模块可以用于太阳能发电系统…

transfomer中正余弦位置编码的源码实现

简介 Transformer模型抛弃了RNN、CNN作为序列学习的基本模型。循环神经网络本身就是一种顺序结构&#xff0c;天生就包含了词在序列中的位置信息。当抛弃循环神经网络结构&#xff0c;完全采用Attention取而代之&#xff0c;这些词序信息就会丢失&#xff0c;模型就没有办法知…

子域名的介绍及收集

1、子域名作用编辑 收集子域名可以扩大测试范围&#xff0c;同一域名下的二级域名都属于目标范围。 2、 常用方式编辑 子域名中的常见资产类型一般包括办公系统&#xff0c;邮箱系统&#xff0c;论坛&#xff0c;商城&#xff0c;其他管理系统&#xff0c;网站管理后台也有可…

获得店铺的所有商品 API、店铺列表api

taobao.item_search_shop 公共参数 名称类型必须描述keyString是调用key&#xff08;必须以GET方式拼接在URL中&#xff09;secretString是调用密钥api_nameString是API接口名称&#xff08;包括在请求地址中&#xff09;[item_search,item_get,item_search_shop等]cacheStrin…

transfomer的位置编码

什么是位置编码 在transformer的encoder和decoder的输入层中&#xff0c;使用了Positional Encoding&#xff0c;使得最终的输入满足&#xff1a; input_embeddingpositional_encoding 这里&#xff0c;input_embedding的shape为[n,b,embed_dim],positional_encoding和input_…

推荐一个页面引导库 driver.js

页面引导功能是 web 开发中常见的一个功能。通过页面引导功能&#xff0c;你可以让用户第一时间熟悉你的页面功能。今天给大家推荐一个页面引导库 driver.js。 简介 driver.js 是一款用原生 js 实现的页面引导库&#xff0c;上手非常简单&#xff0c;体积在 gzip 压缩下仅仅 5…

《手把手教你》系列技巧篇(十)-java+ selenium自动化测试-元素定位大法之By class name(详细教程)

1.简介 按宏哥计划&#xff0c;本文继续介绍WebDriver关于元素定位大法&#xff0c;这篇介绍By ClassName。看到ID&#xff0c;NAME这些方法的讲解&#xff0c;小伙伴们和童鞋们应该知道&#xff0c;要做好Web自动化测试&#xff0c;最好是需要了解一些前端的基本知识。有了前端…

DDOS攻击,一篇文章给你讲清!

1、互联网安全现状 随着网络世界的高速发展&#xff0c;各行业数字化转型也在如火如荼的进行。但由于TCP/IP网络底层的安全性缺陷&#xff0c;钓鱼网站、木马程序、DDoS攻击等层出不穷的恶意攻击和高危漏洞正随时入侵企业的网络&#xff0c;如何保障网络安全成为网络建设中的刚…

如何实现扫码填报信息,并且可以做统计和导出excel

日常工作中经常遇到需要收集信息的情况&#xff0c;如果能实现扫一下二维码&#xff0c;就可以直接填写信息&#xff0c;不用登录&#xff0c;不用开账号&#xff0c;填写完直接可以生成excel&#xff0c;那就非常好了。 我试用了很多平台&#xff0c;有的收费的&#xff0c;也…

VL53L5CX距离传感器

I2C接口的飞行时间多区测距传感器 意法半导体VL53L5CX是一款先进的飞行时间 (ToF) 多区域测距传感器 VL53L5CX 采用意法半导体最新一代的直接 ToF 技术&#xff0c;无论目标颜色和反射率如何&#xff0c;都可以进行绝对距离测量。它提供高达 400 cm的精确测距&#xff0c;并且…

transbigdata笔记:栅格参数优化

在transbigdata中&#xff0c;栅格参数有如下几个 params(lonStart,latStart,deltaLon,deltaLat,theta) 如何选择合适的栅格参数是很重要的事情&#xff0c;这会对最终的分析结果产生很大的影响。 怎么选择参数&#xff0c;和数据以及分析的目的息息相关&#xff0c;transbi…

C语言爬虫程序编写的爬取APP通用模板

互联网的飞快发展&#xff0c;尤其是手机终端业务的发展&#xff0c;让越来越多的事情都能通过手机来完成&#xff0c;电脑大部分的功能也都能通过手机实现&#xff0c;今天我就用C语言写一个手机APP类爬虫教程&#xff0c;方便后期拓展APP爬虫业务。而且这个模板是通用的适合各…

【PyTorch】在PyTorch中使用线性层和交叉熵损失函数进行数据分类

在PyTorch中使用线性层和交叉熵损失函数进行数据分类 前言&#xff1a; 在机器学习的众多任务中&#xff0c;分类问题无疑是最基础也是最重要的一环。本文将介绍如何在PyTorch框架下&#xff0c;使用线性层和交叉熵损失函数来解决分类问题。我们将以简单的Iris数据集作为起点…