先搞清楚低代码/无代码分类再讨论

本文探讨了低代码/无代码开发平台的定义、核心能力点,强调了开发平台应具备导出并独立部署应用的能力。Gartner的定义被引用,同时提供了多个平台的对比分析,包括iVX、Mendix等,帮助读者理解并鉴别真正的开发平台。作者警告市场上的盲目跟风可能导致泡沫,建议评估平台是否能生成独立部署的代码以及收费模式。

讨论的基础是定义,定义基础是分类~包括用户,场景都不一样,放在一起讨论,完全没有意义。

主要回答几个问题?

(1)做的东西东西是给谁用?开发人员?还是业务人员?(不要告诉我两个都能用,这个有点扯)

(2)能做哪些场景支持哪些系统?特定场景还是通用?

(3)做出来的东西是否能够独立部署?不是指整个给人装过去,是开发什么应用,抽离平台,独立部署过去,要生成完整前后台代码那种?是否支持?


就今年和去年就出来几十家“低代码/无代码”开发平台,这个节奏是太快了,我觉得“都是钱惹的祸”~~~资本和市场的盲目给害的,狂欢过后,往往一地鸡毛!


一、看看国外的权威机构的定义


首先我们看看最权威的Gartner的定义:(本身是要花2000美元买的报告,我免费发给大家

参考地址:https://www.gartner.com/doc/reprints?id=1-24BSMGBN&ct=201007&st=sb

参考地址:https://www.gartner.com/doc/reprints?id=1-24BBDEDZ&ct=201005&st=sb

二、判定的核心能力点是哪些?


大家也可以不用看了,我都翻译成中文了,然后结合国情简化了一下,“低代码/无代码”判定的核心能力点如下图所示:

三、什么是开发平台?

LCDP(low code development platform),首先要是一个开发平台
开发平台核心:开发出来的应用要能够导出,并脱离(独立)于平台部署!
也就是要生成独立的代码,和编程写代码所生成的代码要一样。否则,你就永远脱离不了它了~
现在很多低代码产品,顶多算是“开发框架”,或理解为一个引擎,也就是说“开发好的东西,要和他们的这个框架和引擎一起打包一起部署,才能使用”。因此,严格意义上来讲,不算是一个“开发平台”。当然,也不能生成独立部署的代码!
判定方法很简单,就两条,免费教大家一下:
1、如果生成的应用不能脱离平台独立部署和发布,那就不是“开发平台”!
2、如果收费,是按最终用户数收费的(不是按开发者数量/或开发应用数量收费),一般都不是“开发平台”!
费了老大劲总结的表,希望对大家有用,主要是对“低代码开发平台”进行收集整理和评价。

四、各平台核心能力对比分析(点击放大看,这个是重点)

包括

iVX
Mendix/Outsystems
牛刀
Power Apps
活字格
无远
氚云
宜搭云
明道
天翎
云表
workfine
fineReport
魔方网表
炎黄盈动|AWSPaaS
红圈
APICloud

点击下图看详情

五、分类依据


希望这些内容对大家有帮助!!!去伪存真,也节省大家的时间。

<think>我们讨论的是如何在不使用类和复杂代码的情况下,实现结构体的排序。根据用户提供的引用,我们可以从多个编程语言的角度来解答,但用户似乎希望一个简单的方法,可能更偏向于C/C++或者Java等语言。不过,用户提到“不使用类和复杂代码”,所以我们将尽量用基础的结构体和简单的排序方法。 引用[1]展示了Java中使用结构体(Node类)和Arrays.sort进行排序的例子。 引用[2]提到了Python中使用namedtuple和attrgetter进行结构体排序。 引用[3]则展示了C语言中结构体的冒泡排序。 由于用户要求不使用类和复杂代码,我们可以考虑以下方法: 1. 在C语言中,我们可以使用结构体数组和qsort函数,通过自定义比较函数来实现排序。 2. 在C++中,我们可以使用结构体和std::sort,同样自定义比较函数或lambda表达式。 3. 在Java中,我们可以使用数组和Arrays.sort,结合Comparator(但这里用户可能认为Comparator是类,所以我们可以考虑使用匿名内部类,但用户要求不用复杂代码,所以也可以考虑自己写排序算法)。 4. 在Python中,我们可以使用列表和sorted函数,通过key参数来指定排序依据。 但是,用户要求“不使用类和复杂代码”,所以我们尽量避免定义类,而是使用结构体(在支持结构体的语言中)和简单的排序算法。 下面,我将分别用C、C++、Java和Python给出简单的示例,展示如何对结构体数组进行排序。注意,我们尽量使用最简单的代码,避免复杂的面向对象特性。 假设我们有一个结构体Person,包含姓名(name)和年龄(age)两个字段,我们按照年龄从小到大排序,如果年龄相同则按姓名字典序排序。 1. C语言(使用qsort): ```c #include <stdio.h> #include <stdlib.h> #include <string.h> typedef struct { char name[50]; int age; } Person; // 比较函数 int compare(const void *a, const void *b) { Person *p1 = (Person *)a; Person *p2 = (Person *)b; if (p1->age != p2->age) { return p1->age - p2->age; } return strcmp(p1->name, p2->name); } int main() { Person people[] = {{"Tom", 23}, {"Jerry", 20}, {"Alice", 20}}; int n = sizeof(people) / sizeof(people[0]); qsort(people, n, sizeof(Person), compare); for (int i = 0; i < n; i++) { printf("%s: %d\n", people[i].name, people[i].age); } return 0; } ``` 2. C++(使用std::sort): ```cpp #include <iostream> #include <algorithm> #include <string> #include <vector> struct Person { std::string name; int age; }; bool compare(const Person& a, const Person& b) { if (a.age != b.age) { return a.age < b.age; } return a.name < b.name; } int main() { std::vector<Person> people = {{"Tom", 23}, {"Jerry", 20}, {"Alice", 20}}; std::sort(people.begin(), people.end(), compare); for (const auto& p : people) { std::cout << p.name << ": " << p.age << std::endl; } return 0; } ``` 3. Java(使用Arrays.sort和匿名内部类,但这里我们避免使用类,所以用数组和Comparator,但用户要求不用类,我们可以自己写排序算法,比如冒泡排序): 由于Java中结构体通常用类表示,且用户要求不用类,我们可以用两个数组分别存储姓名和年龄,但这样就不是结构体了。所以这里还是用类表示结构体,但排序时自己写冒泡排序。 或者,我们可以这样:不使用Comparator,而是自己实现一个简单的排序算法(如冒泡排序)来对结构体数组排序。 ```java public class Main { static class Person { String name; int age; Person(String name, int age) { this.name = name; this.age = age; } } public static void main(String[] args) { Person[] people = {new Person("Tom", 23), new Person("Jerry", 20), new Person("Alice", 20)}; // 冒泡排序 for (int i = 0; i < people.length - 1; i++) { for (int j = 0; j < people.length - i - 1; j++) { if (compare(people[j], people[j+1]) > 0) { // 交换 Person temp = people[j]; people[j] = people[j+1]; people[j+1] = temp; } } } for (Person p : people) { System.out.println(p.name + ": " + p.age); } } // 比较两个Person,如果a大于b则返回正数,小于则返回负数,等于返回0 static int compare(Person a, Person b) { if (a.age != b.age) { return a.age - b.age; } return a.name.compareTo(b.name); } } ``` 4. Python(使用列表和sorted函数,用lambda指定排序键): 在Python中,我们可以使用元组或字典,但用户要求结构体,我们可以用namedtuple或者直接用元组。这里我们用元组,并通过key参数指定排序规则。 但是,如果用户希望用结构体,我们可以用列表包含多个元组,或者使用namedtuple(但namedtuple属于类,所以我们不用)。我们还可以使用字典列表,但排序同样简单。 ```python # 使用元组列表 people = [("Tom", 23), ("Jerry", 20), ("Alice", 20)] # 按年龄升序,然后按姓名升序 sorted_people = sorted(people, key=lambda x: (x[1], x[0])) for p in sorted_people: print(f"{p[0]}: {p[1]}") # 如果希望用字典 people_dict = [{"name": "Tom", "age": 23}, {"name": "Jerry", "age": 20}, {"name": "Alice", "age": 20}] sorted_people_dict = sorted(people_dict, key=lambda x: (x['age'], x['name'])) for p in sorted_people_dict: print(f"{p['name']}: {p['age']}") ``` 总结: 根据用户需求,我们提供了不同语言下不使用类(或尽量避免使用类)的结构体排序方法。核心思路是: 1. 定义结构体(在C/C++中)或用其他简单数据结构(如元组、字典)表示结构体。 2. 使用语言内置的排序函数(如C的qsort,C++的std::sort,Python的sorted)并自定义比较规则,或者自己实现简单的排序算法(如冒泡排序)来排序。 注意:自己实现排序算法在数据量大时效率不高,但对于小规模数据是可行的。 如果用户对特定语言有要求,可以进一步说明。 相关问题: 1. 在C语言中如何对结构体的多个字段进行多级排序? 2. 如何在不使用内置排序函数的情况下实现结构体排序? 3. 在Python中使用字典列表进行排序有哪些注意事项? 4. 如何优化结构体排序的性能? </think> ### 结构体排序方法(不使用类和复杂代码) 在编程中实现结构体排序,可不使用类和复杂代码,主要方法如下: #### 1. C语言实现(使用qsort) ```c #include <stdio.h> #include <stdlib.h> #include <string.h> // 定义结构体 struct Person { char name[50]; int age; float height; }; // 比较函数:按年龄升序 int compareByAge(const void* a, const void* b) { struct Person* p1 = (struct Person*)a; struct Person* p2 = (struct Person*)b; return p1->age - p2->age; // 升序排序[^3] } // 比较函数:按姓名升序 int compareByName(const void* a, const void* b) { struct Person* p1 = (struct Person*)a; struct Person* p2 = (struct Person*)b; return strcmp(p1->name, p2->name); } int main() { struct Person people[] = { {"Tom", 25, 175.5}, {"Alice", 30, 165.0}, {"Bob", 20, 180.0} }; int n = sizeof(people) / sizeof(people[0]); // 按年龄排序 qsort(people, n, sizeof(struct Person), compareByAge); // 按姓名排序 // qsort(people, n, sizeof(struct Person), compareByName); // 打印结果 for (int i = 0; i < n; i++) { printf("%s: %d years, %.1f cm\n", people[i].name, people[i].age, people[i].height); } return 0; } ``` #### 2. C++实现(使用std::sort) ```cpp #include <iostream> #include <algorithm> #include <vector> #include <string> // 定义结构体 struct Person { std::string name; int age; double height; }; int main() { std::vector<Person> people = { {"Tom", 25, 175.5}, {"Alice", 30, 165.0}, {"Bob", 20, 180.0} }; // 按身高降序排序 std::sort(people.begin(), people.end(), [](const Person& a, const Person& b) { return a.height > b.height; // 降序排序[^1] }); // 多级排序:先年龄升序,再姓名升序 /* std::sort(people.begin(), people.end(), [](const Person& a, const Person& b) { if (a.age != b.age) return a.age < b.age; return a.name < b.name; }); */ // 打印结果 for (const auto& p : people) { std::cout << p.name << ": " << p.age << " years, " << p.height << " cm\n"; } return 0; } ``` #### 3. Python实现(使用sorted和lambda) ```python # 定义结构体(使用元组或字典) people = [ {'name': 'Tom', 'age': 25, 'height': 175.5}, {'name': 'Alice', 'age': 30, 'height': 165.0}, {'name': 'Bob', 'age': 20, 'height': 180.0} ] # 按年龄升序排序 sorted_people = sorted(people, key=lambda x: x['age']) # 多级排序:先身高降序,再姓名升序 # sorted_people = sorted(people, key=lambda x: (-x['height'], x['name'])) # 打印结果 for p in sorted_people: print(f"{p['name']}: {p['age']} years, {p['height']} cm") ``` ### 关键方法说明 1. **比较函数设计** 通过定义比较逻辑实现排序规则: - 升序:`return a.field < b.field` - 降序:`return a.field > b.field` - 多级排序:按优先级比较字段[^1] 2. **语言特性利用** - C:使用`qsort`+比较函数指针 - C++:使用`std::sort`+lambda表达式 - Python:使用`sorted`+key参数 3. **数据结构选择** 使用基础数据结构表示"结构体": ```mermaid graph LR A[结构体表示] --> B[C/C++ struct] A --> C[Python 字典] A --> D[Python 命名元组] ``` ### 多级排序示例 若要实现三级排序(如:年龄→身高→姓名): ```cpp // C++多级排序 std::sort(people.begin(), people.end(), [](const Person& a, const Person& b) { if (a.age != b.age) return a.age < b.age; // 第一级:年龄升序 if (a.height != b.height) return a.height > b.height; // 第二级:身高降序 return a.name < b.name; // 第三级:姓名升序 }); ``` ### 性能特点 | 方法 | 时间复杂度 | 空间复杂度 | 适用场景 | |------|-----------|-----------|---------| | qsort | $O(n \log n)$ | $O(1)$ | 嵌入式系统 | | std::sort | $O(n \log n)$ | $O(\log n)$ | 通用应用 | | sorted | $O(n \log n)$ | $O(n)$ | 快速原型 | 这些方法避免了类和复杂封装,直接使用语言基础特性实现结构体排序[^2]。
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值