数组按字母顺序排序?

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(使用前将#替换为@)

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

  • delphi中生成随机数

    我想在delphi中创建一个随机数并将其分配给文件作为文件名 我设法做到了这一点 但是当我单击按钮生成数字时 它总是以 0 开头 知道如何修复它 procedure TForm1 Button1Click Sender TObject va
  • 启动时系统托盘图标不出现

    我在 FormCreate 事件处理程序中使用以下代码来创建系统托盘图标 当我运行程序时 系统托盘图标显示正常 我将应用程序设置为在 Windows 启动时自动启动 当我重新启动计算机时 我的应用程序进程已启动 但系统托盘图标从未出现 我认
  • 条件表达式在包内是否被破坏?

    考虑以下片段 requires designide rtl vcl IF RTLVersion lt 19 0 E2026 Constant expression expected IF CompilerVersion 22 0 same
  • Delphi - 将字符串从 UTF-8 转换回来

    我在将 UTF 8 编码字符串转换回 delphi 可用的字符串时遇到问题 该应用程序是用 XE8 编写的 并部署在 Windows 和 OSX 上 该应用程序分别在 Windows 和 OSX 上使用 LimeLM API dll 和 d
  • 从单个应用程序中的多个线程调用 dll 函数是否安全?

    我正在 Delphi 2009 中编写一个服务器应用程序 它实现了多种类型的身份验证 每种身份验证方法都存储在单独的 dll 中 第一次使用身份验证方法时 会加载适当的 dll 仅当应用程序关闭时 DLL 才会被释放 在服务器线程 连接 之
  • 能否从 Vista Shell 获取 48x48 或 64x64 图标?

    如果 Vista Shell 中存在 48x48 或 64x64 图标 如何使用 SHGetFileInfo 获取在 TImage 中显示图标的句柄 我想从图像列表中选择一个代表文件夹路径的图标 并在 Timage 中显示 48x48 或
  • 如何允许表单接受文件删除而不处理 Windows 消息?

    在 Delphi XE 中 我可以允许我的表单接受文件 拖放 但不必处理裸窗口消息吗 您不需要处理消息来实现这一点 你只需要实施IDropTarget并打电话RegisterDragDrop RevokeDragDrop 这真的非常非常简单
  • 如何使用用户输入来寻址 Pascal 中的特定变量(Eval/Exec?)

    我正在尝试在分形程序中做一些非常具体的事情隆起7X http apophysis 7x org 使用的脚本语言是Pascal 该项目是用德尔福写的 https svn code sf net p apophysis7x svn trunk
  • Delphi如何使用其他窗体中的类型?

    抱歉 这是一个非常新手的问题 我正在对这个庞大的应用程序进行维护 它有5种不同的形式 我们将全局变量放在一个单元 uGlobal 中 但我似乎无法从数据单元 uData 访问它 我有这个 Unit uGlobal type TmyType
  • 如何将 JSON 字符串转换为图像?

    我有一个将图像转换为 JSON 数组的应用程序 并将其保存到 blob 字段中 function getImage String var memorystream TMemoryStream jsonArray TJSONArray beg
  • 如何读取注册表项的默认值

    我有一个 Delphi XE2 项目来使用注册表项进行某些操作 所以我定义了以下代码 procedure TMainForm BitBtn01Click Sender TObject var RegistryEntry TRegistry
  • 从delphi应用程序调用.net4.0 com服务器后出现错误异常

    我们正在将代码库从 BDS2006 迁移到 Rad Studio XE 我们发现了一些非常奇怪的行为 如果我们在从 Net4 0 中实现的 COM 服务器创建一些对象后进行无效的浮点运算 即除以零 我们不会没有得到正常异常 即 EDivis
  • Delphi XE5 REST/Android 客户端“会话已过期”

    我有一个REST Server与Android Client 都在Deplhi Xe5 Android客户端成功连接Rest服务器 在我的服务器中我有一个TDSHttpWebDispatcher with SessionTimeout 12
  • 我需要避免尝试更新连接到 TSQLQuery 的 Delphi TClientDataset 中的非物理字段

    概要 我的代码正在尝试更新 Delphi XE 中的非物理字段TClientDataset 连接到TSQLQuery以其SQL属性集 作为运行时的结果创建Open命令 我有一个TClientDataset连接到一个TDatasetProvi
  • Delphi中的抽象类

    我正在使用一个具有许多抽象类的组件套件 现在我想应用多态性 但在创建对象时收到错误抽象类 即使我不需要 我是否应该重写所有虚拟方法 有什么解决方法或解决方案吗 为了创建类的实例 您需要重写所有声明为虚拟抽象的方法 即使您不使用它们 如果您确
  • 如何从 Delphi 中的函数返回对象而不导致访问冲突?

    我有一个返回 TStringList 的 delphi 函数 但是当我返回一个值并尝试使用它时 我收到一个访问冲突错误 即 myStringList FuncStringList myStringList Items Count lt Th
  • TColorProperty德尔福柏林10.1.2?

    我正在尝试将组件从 Delphi 7 转换为 Delphi Berlin 平面组件 https sourceforge net projects flatstyle https sourceforge net projects flatst
  • 使用项目中的波形文件

    我目前只能通过将波形文件放在已编译的 exe 旁边来播放背景声音 但我实际上想要一个包含波形文件的静态可执行文件 这在Delphi XE2中可能吗 这是我的代码 SndPlaySound Raw wav SND ASYNC or SND L
  • 打印 TDBGrid [重复]

    这个问题在这里已经有答案了 如何在不安装或下载组件的情况下打印 DBGrid OR 如何将 DBGrid 的数据放入 RichEdit 以便我可以从那里打印它 数据感知控件从 DataSource 属性获取数据 并使用它 不过 您必须手动遍
  • Delphi中使用FindVCLWindow调用WinHelp32(WinXP Pro SP3 32bit)

    有什么问题吗 procedure TForm1 VCLHelpClick Sender TObject var Ctrl TWinControl begin Ctrl FindVCLWindow Mouse CursorPos if Ctr

随机推荐

  • 测试浏览器中对 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