数组按字母顺序排序?

2024-03-16

假设我有两个字符串数组,名为“arrayone”和“arraytwo” 我将如何按照字母顺序(从 A 到 Z)对“arrayone”进行排序,同时仍然保持与第二个数组的关系。

如果您想知道“arrayone”和“arraytwo”中的内容,1 表示每个人的姓氏,2 表示每个人的年龄。我的最终结果是将其添加到 Richedit 中。

场景示例:

Smith           25 
Appleseed       32
Gibbs           45

必须变成:

Appleseed       32
Gibbs           45
Smith           25

请不要使用字符串列表,将其保存在简单数组和过程中。

更新:我切换到录音。

尝试了这段代码没有效果

for i := 0 to 26 do
for j := 0 to 26 do
  if recordname.surname[j] > recordname.surname[j+1] then begin
    line := recordname.surname[j];
    line[j] := recordname.surname[j+1];
    recordname.surname[j+1] := line;
  end;

它说不兼容的类型:“Char”和“String”


在向您提供有关数据结构的建议并看到随后的困难之后,我想把事情说清楚并更清楚地解释我的意思。

您的原始代码有两个基本上未连接的数组。您可能会交换一个数组中的项目,但很容易忘记在另一个数组中这样做。在我看来,姓名/年龄对确实不应该分开。这导致以下类型声明。

type
  TPerson = record
    Name: string;
    Age: Integer;
  end;

现在你需要保存一个数组TPerson.

type
  TPersonArray = array of TPerson;

为了执行排序,您需要能够比较两个项目并交换它们。

function Compare(const Person1, Person2: TPerson): Integer;
begin
  Result := CompareText(Person1.Name, Person2.Name);
end;

procedure Swap(var Person1, Person2: TPerson);
var
  temp: TPerson;
begin
  temp := Person1;
  Person1 := Person2;
  Person2 := temp;
end;

现在我们可以用冒泡排序将所有这些放在一起。

procedure Sort(var People: TPersonArray);
var
  i, n: Integer;
  Swapped: Boolean;
begin
  n := Length(People);
  repeat
    Swapped := False;
    for i := 1 to n-1 do begin
      if Compare(People[i-1], People[i])>0 then begin
        Swap(People[i-1], People[i]);
        Swapped := True;
      end;
    end;
    dec(n);
  until not Swapped;
end;

现在,如果您想使用更复杂的比较运算符,那么您可以简单地替换Compare。例如,如果您想按年龄对同名的任何人进行排序,则可以使用字典比较函数。

function Compare(const Person1, Person2: TPerson): Integer;
begin
  Result := CompareText(Person1.Name, Person2.Name);
  if Result=0 then begin
    Result := Person2.Age-Person1.Age;
  end;
end;

我已经一点一点地写下了这个答案,这就是你应该如何处理像这样的更大的问题。尝试将其分解为更小的部分,每个部分都是可以管理的。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

数组按字母顺序排序? 的相关文章

  • 如果鼠标不在 VirtualTreeView (TVirtualStringTree) 上,如何禁用 MouseWheel

    如果 TVirtualStringTree 获得焦点 则默认情况下它会在鼠标滚轮上滚动 即使鼠标未超出控制范围 除非它位于另一个 TVirtualStringTree 上方 有没有一种快速而优雅的方法来禁用这种行为 我已经这样做了OnMou
  • XE2 中的 COM 是否损坏?我该如何解决它?

    Update XE2 Update 2 修复了下述错误 下面的程序是从实际程序中截取的 在 XE2 中失败并出现异常 这是 2010 年的回归 我没有 XE 来测试 但我希望该程序在 XE 上运行良好 感谢 Primo 确认代码在 XE 上
  • Delphi 如何与 Active Directory 集成?

    我们需要使用 Delphi 7 验证 Microsoft Active Directory 上的用户 最好的方法是什么 我们可以有两种情况 用户输入其网络用户名和密码 其中用户名可能包括域 然后我们检查活动目录是否是有效的活动用户 或者我们
  • Delphi - 通过 ADO 查询获取 Excel 行

    我有以下 Excel 文件 我将 AdoConnection ConnectionString 设置为 AdoConnection ConnectionString Provider Microsoft Jet OLEDB 4 0 Data
  • ComboBox.Sorted 发生了什么:= True;在德尔福 10.2 中?

    最近我的最后一个问题获得了 风滚草 徽章 我不确定是否应该问更多问题 但这里是 我正在填充一个TComboBox使用 sqlite 表中的项目 效果很好 在我以前的 Delphi 版本中 我能够使用ComboBox1 Sorted True
  • Delphi (Indy) TIdTCPClient 在线程中

    在互联网上 我看到通常将 TIdTCPClient 放置在自定义 TThread 后代中 为什么要这样做 有时我也在这样的线程中看到服务器 为什么 干杯 阿德里安 Indy 使用阻塞 I O 最好在线程中处理 这是 Indy 整体设计的核心
  • 如何从具有管理员权限的应用程序接收键盘输入到非管理员应用程序?

    我编写了一个应用程序 该应用程序具有覆盖类型的窗口 可以通过热键显示和隐藏该窗口 而另一个应用程序具有焦点 所述另一个应用程序是一个以管理员权限运行的 DirectX 游戏 我已经尝试了 3 种可能的解决方案 以便在其他应用程序中按下我的热
  • 获取 TransactSql 批处理中的语句数计数

    对于不使用 Delphi 的读者 虽然以下内容是根据 Delphi 编码来表达的 但我的实际技术问题不是特定于 Delphi 的 而是关于如何找出 Sql Server 如何 理解 TransactSql 批处理提交给它 TAdoQuery
  • Indy 的 TIdHTTPProxyServer:如何过滤请求?

    我正在使用 TIdHTTPProxyServer 来实现一个简单的 HTTP 代理 但我现在想阻止一些与某些 URL 匹配的连接 哪个事件和 或组件最适合实现这一目标 Indy 文档并没有太多解释 Thanks 作为基本过滤器 您可以使用
  • Firemonkey 编辑/组合自动完成/打字时自动建议

    实施方式是什么Autocomplete or Autosuggest适用于 Windows Android 平台以及 MacOS 和 iOS 的 Delphi Firemonkey Example 当用户在 Google 搜索框中输入文本时
  • 开源 Delphi 包可使用哪些项目选项?

    我写了一些 Delphi 代码 想在 GitHub 上分享 所有代码都根据需要包含在运行时和设计时包中 每个项目有许多项目选项需要设置 输出目录 搜索路径 编译选项等 我设法找到了一些适合我的情况的默认选项 但阅读此处的其他问答很明显有多个
  • 如何遍历任意给定集合中的枚举?

    我有很多枚举类型 它们与相应的集合相结合 例如 type TMyEnum meOne meTwo meThree TMyEnums set of TMyEnum 我正在尝试提出一组可以运行的函数any枚举集 而不是为每个枚举编写单独的函数
  • 处理 TShellListView 后代中的文件放置

    我正在尝试创建 TShellListView 的后代 它接受从 Windows 资源管理器中删除的文件 我想在组件定义中处理拖 放操作 而不必在任何使用该组件的应用程序中实现它 我找到了接受从 Windows 资源管理器中拖放的文件的示例
  • 如何在 Delphi DBLookupComboBox 中选择正确的项目

    我有一个数据库查找组合框连接到数据库查询 那部分工作正常 当我运行程序时数据库查找组合框填充有查询的结果 我想看看数据库查找组合框填充第一项 请选择 当 的时候程序第一次运行或者当一个新项目行动已启动 见下图 另外 如果我正在加载以前保存的
  • 为什么未初始化的指针会导致内存访问冲突接近 0?

    据说often 但并非总是如此 当你在接近于零的内存位置 比如 89 美元 获得 AV 时 你就有了一个未初始化的指针 但我也在 Delphi 书籍中看到了这一点 嗯 或者它们都是由同一作者写的 Update 引自 Bob Swart 等人
  • 当responseText包含有效的Xml时,IXMLHttpRequest.responseXml为空,没有解析错误

    我正在从中获取一些 XML政府网站 http www bankofcanada ca stats assets rates rss noon en all xml http www bankofcanada ca stats assets
  • 在 Delphi 中使用 XML(将特定数据返回到变量)

    过去几天我一直在尝试使用 Delphi 2010 和 MSXML 我是一个极端的新手 需要一点指导 var MemoryStream TMemoryStream XMLPath String sName String XMLDoc vari
  • Delphi 2009 IDE结构视图折叠功能

    现在有谁知道折叠 Delphi 2009 IDE 结构视图中的所有项目吗 我不知道折叠所有项目 这使我很难从视图中找到我的课程 Thanks 选择根节点 类 并按数字键盘上的 除号 那会让一切崩溃 然后按数字键盘上的 加号 键 第一级将展开
  • 将数据从一个数据集结构移动到另一个数据集结构的更快方法(在 TDatasetProvider 中)

    我有一个自定义的 TDatasetProvider 它允许为其提供的任何数据创建新字段 因此 假设您在原始数据集上获得了以下字段 客户ID Name Age 您需要使用显示位图在 DBGrid 上选择它 好吧 你可以 因为我的 DSP 可以
  • 如何在运行时(Delphi/Windows)程序中添加代码?

    我正在Windows XP Delphi 7上工作 我需要在正在运行的程序中添加一些过程 或函数 并且我不想在完成后再次重新编译它 我只有一个具有 5 个功能的主机应用程序来发送不同类型的警报 但是还有其他新的警报类型 所以我必须执行新的功

随机推荐

  • 测试浏览器中对 Overflow-y:auto 的支持

    我想测试浏览器是否支持特定的 css 属性 对于 css 属性 我可以这样做 var overflowSupport document createElement detect style overflow y 但是如果我必须检查特定的类或
  • 如何将 ssh 作业发送到后台

    我通过 ssh 登录到远程服务器并启动了一个 php 脚本 看起来需要 17 个小时才能完成 有没有办法断开连接但保持脚本执行 我没有进行任何输出重定向 所以我看到了所有输出 您现在可以停止该过程吗 如果是这样 启动screen http
  • Powershell - Outlook 将所有邮件标记为已读然后删除

    试图解决这个问题时遇到一些问题 由于某种原因 我的脚本无法正常工作 它应该将收件箱文件夹中的所有邮件标记为已读 然后删除它们 但是 当脚本运行时 它只会删除 count emails 显示的一半 怎么解决这个问题 我是不是做错了什么 out
  • 向 Google Visualization LineChart 添加一个垂直线标记,当鼠标移动时该标记也会移动?

    是否可以在 LineChart 上显示垂直线标记 显示当前 x 轴值 并在鼠标移动时移动 提前致谢 虽然这在以前很困难 但最近 API 的更新使其变得更加容易 您需要使用鼠标悬停事件处理程序来获取鼠标坐标 并使用新的 ChartLayout
  • 在 haskell 中定义一个新的 monad 不会引发 Applicative 的实例

    我正在尝试定义一个新的 monad 但遇到了一个奇怪的错误 纽莫纳德 hs newtype Wrapped a Wrap unwrap a instance Monad Wrapped where gt gt Wrap x f f x re
  • ASP.NET MVC 通过文件/文件路径确定 mime 类型

    我正在使用 ASP NET MVC 3 该应用程序的目标是 net 4 0 我试图将虚拟路径作为参数传递给控制器 的操作并返回文件 而不检查服务器上的实际物理路径并提供基本授权 不幸的是 我无法找到合适的 File 方法重载来生成适当的 A
  • Plotly-R:如何制作有间隙的 y 轴?

    Is it possible to create a plotly bar chart e g any chart from the following website https plotly com r bar charts https
  • 在 Java 中将数字转换为灰度颜色

    我试图弄清楚如何将 1 到 50 之间的数字转换为可以在此处使用的灰度颜色 g setColor MyGreyScaleColour 1 表示最亮 白色 50 表示最暗 黑色 e g Color intToCol int colNum co
  • 控制风扇速度

    我想用C 控制风扇速度 我尝试了 WMI 但它对我不起作用 我有配备 Intel Core i5 的 HP ProBook Windows 7 HomePremium 64 位 还有其他方法可以控制风扇速度 获取温度 将风扇速度设置为更高或
  • 使用 ZF 使 Zend_Rest_Server 返回 JSON 而不是 XML

    Zend Rest Server 可以返回 Json 吗 如果没有 有什么替代方案 其他库建议也可以 Zend Rest Server 输出 XML 尽管文档中没有明确指定 有一些替代方案 您可以利用 Zend Framework 提供的整
  • 如何停止谷歌云数据流中的流管道

    我有一个正在运行的流数据流来读取 PUB SUB 订阅 一段时间后或者可能是在处理一定量的数据后 我希望管道自行停止 我不希望我的计算引擎实例无限期地运行 当我通过数据流控制台取消作业时 它显示为失败的作业 有办法实现这一点吗 我错过了什么
  • Mono 编译错误 - 无法从程序集“System”加载类型“System.Runtime.CompilerServices.ReferenceAssemblyAttribute”

    我在编译 CSharp Mono 应用程序时遇到问题 我的Mono版本是2 10 2 这是我收到的错误 程序集 home tmc AcctTerm System dll 中缺少方法 ctor 类型为 System Runtime Compi
  • TinyMCE v4 关闭 blob

    我不想tinymce使用斑点来处理小图像 因为我正在转换它们data images到真实图像 我正在替换img src 当我有了真实的图像之后 我怎样才能做到只得到data image图片 是否可以 我试过 automatic upload
  • 如何在 OS X 中使用 Java 查找用户的“文档”文件夹?

    我想在用户的 文档 文件夹中创建一个目录 但到目前为止我只找到了如何获取用户的主目录 javax swing JFileChooser fr new javax swing JFileChooser javax swing filechoo
  • scipy 偏态分布的随机变量

    尝试从 SciPy 的分布中抽取随机数 就像使用 stats norm rvs 一样 然而 我试图从我拥有的经验分布中获取数字 这是一个倾斜的数据集 我想将倾斜和峰度合并到我正在绘制的分布中 理想情况下 我只想调用 stats norm r
  • functools.partial 不能与 multiprocessing.Pool.map 一起使用吗?

    我的代码经过简化 如下所示 run functools partial run grep options grep print only options print only force options force if not optio
  • 错误:getaddrinfo EAI_AGAIN(docker、nginx)

    我知道此错误与 DNS 查找超时错误相关 意味着它是网络连接错误或代理相关错误 但是我不知道如何解决它 我使用 docker compose yml 里面有 3 个容器 这是我的 docker compose yml 作为链接 docker
  • 数据表加载速度非常慢

    我使用数据表作为页面上某些下拉列表的数据源 但注意到页面在回发期间非常慢 我已经追踪到这里 DataTable dt new DataTable dt Load sqlCmd ExecuteReader this takes ages sq
  • 如何使用百分比作为参数调整 HTML 中的图像大小?

    我想调整我网站上的图像大小 我知道如何通过之前调整图像大小或计算宽度和高度并以像素为单位设置值来做到这一点 但我多次使用不同尺寸的同一张图片 因此如果我可以相对于图像本身的大小调整图像的大小 那么我会花费更少的时间 img src imag
  • 数组按字母顺序排序?

    假设我有两个字符串数组 名为 arrayone 和 arraytwo 我将如何按照字母顺序 从 A 到 Z 对 arrayone 进行排序 同时仍然保持与第二个数组的关系 如果您想知道 arrayone 和 arraytwo 中的内容 1