」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > 如何根據多個條件對 Go 中具有嵌套切片的結構切片進行排序?

如何根據多個條件對 Go 中具有嵌套切片的結構切片進行排序?

發佈於2024-11-08
瀏覽:320

How do you sort a slice of structs with nested slices in Go based on multiple criteria?

使用嵌套切片對結構體切片進行排序

在Go 中,您可以使用內建的排序包對自訂結構體切片進行排序。考慮以下程式碼,它定義了兩個結構體 Parent 和 Child,表示父子關係:

type Parent struct {
    id       string
    children []Child
}

type Child struct {
    id string
}

假設您有一個Parent 結構體切片,並希望根據兩個標準對它們進行排序:

排序標準:

  1. 排序父切片依Parent.id 依升序排列。
  2. 對於每個父切片,按Child.id 對子切片進行排序

解決方案:

提供的程式碼片段滿足排序要求:

``
/ / 按Id
sort.Slice(parents, func(i, j int) bool 將父切片中的每個 Parent 進行排序{

return parents[i].id 

//對於每個Parent,按Id對子切片中的每個Child進行排序
for _,parent := rangeparents {

sort.Slice(parent.children, func(i, j int) bool { 
    return parent.children[i].id 

}
``

sort.Slice函數直接對切片進行操作,消除了需要中間容器。

  1. 它根據 Parent.id 對父切片進行排序。
  2. 對於已排序父切片中的每個父切片,它使用嵌套循環根據 Child.id 對子切片進行排序。

結果與預期輸出一致:

[{1 [{7} {8} {9}]} {2 [{4} {5} {6}]} {3 [{1} {2} {3}]}]
最新教學 更多>
  • 無需媒體查詢的響應式佈局
    無需媒體查詢的響應式佈局
    How often do you use media queries when building web layouts? I’ve spent too much time on them! First you spent quite a lot of time trying to make the...
    程式設計 發佈於2024-11-08
  • 使用 JavaScript 更改錨標記 href 屬性時如何防止頁面重新載入?
    使用 JavaScript 更改錨標記 href 屬性時如何防止頁面重新載入?
    點擊按鈕時使用JavaScript更改錨標籤的href屬性在web開發中,需要動態修改錨標籤的href屬性按鈕點擊時常出現錨標籤。以下是使用 JavaScript 實現此目的的方法。 在提供的程式碼片段中,f1() 函數將 ID 為「abc」的元素的 href 屬性變更為「xyz.php」。但是,提...
    程式設計 發佈於2024-11-08
  • 使用 Sheepy 在 Python 中進行單元測試
    使用 Sheepy 在 Python 中進行單元測試
    大家好,今天我来给大家介绍一个新的单元测试库,叫做sheepy,不过首先我们来说说单元测试的重要性。这个库不适合初学者,要使用它进行单元测试,您需要额外注意。它仅具有用于使用端点和 http 错误检查模块进行 API 测试的断言。 Github链接:github PyPi 链接:pypi 生产中所有...
    程式設計 發佈於2024-11-08
  • 為什麼「pch.h」應該成為 C/C++ 專案中的第一個頭檔?
    為什麼「pch.h」應該成為 C/C++ 專案中的第一個頭檔?
    預編譯頭:理解「pch.h」在C和C語言開發中,「pch.h」代表預編譯頭文件。將其作為第一個頭檔包含在編譯速度方面具有顯著的優勢。 什麼是預編譯頭? 預編譯頭是頭的中間形式編譯器產生的檔案。它包含優化編譯過程的編譯訊息,特別是對於大型或大量包含的頭檔。 為什麼包含「pch.h」作為第一個頭檔? 在...
    程式設計 發佈於2024-11-08
  • 探索 JVM 虛擬執行緒機制中的固定
    探索 JVM 虛擬執行緒機制中的固定
    Java 的虚拟线程提供了传统操作系统线程的轻量级替代方案,从而实现了高效的并发管理。但了解他们的行为对于获得最佳表现至关重要。这篇博文深入探讨了固定(一种可能影响虚拟线程执行的场景),并探讨了监控和解决该问题的技术。 虚拟线程:一种轻量级并发方法 Java 的虚拟线程是运行在底层操...
    程式設計 發佈於2024-11-08
  • 如何在不使用分析函數的情況下有效率地選擇 MySQL 中每個類別的前幾行?
    如何在不使用分析函數的情況下有效率地選擇 MySQL 中每個類別的前幾行?
    在MySQL 中選擇每個類別的前幾行要從表中的每個類別中檢索有限數量的行,您可以使用分析函數。然而,MySQL 並不會直接提供這些功能。不過,可以使用變數來模擬它們。 模擬分析函數以下MySQL 查詢模擬分析函數的功能,以選擇每個類別的前3 行:SELECT x.* FROM ( SELEC...
    程式設計 發佈於2024-11-08
  • 了解 JavaScript 中的非同步程式設計:事件循環初學者指南
    了解 JavaScript 中的非同步程式設計:事件循環初學者指南
    Have you ever wondered why some pieces of JavaScript code seem to run out of order? The key to understanding this is the event loop. JavaScript's even...
    程式設計 發佈於2024-11-08
  • 如何使用 multiprocessing.Manager 在多個進程之間共用結果佇列?
    如何使用 multiprocessing.Manager 在多個進程之間共用結果佇列?
    使用multiprocessing.Manager 在多個進程之間共享結果隊列在多處理中,父子進程之間共享隊列對於通訊和結果檢索至關重要。然而,使用 apply_async 啟動非同步工作進程在共享佇列方面提出了挑戰。 為了克服「佇列物件只能透過繼承在進程之間共享」錯誤,我們可以利用 multipr...
    程式設計 發佈於2024-11-08
  • 如何在Visual Studio Code中設定Python調試的工作目錄?
    如何在Visual Studio Code中設定Python調試的工作目錄?
    如何設定使用 VS Code 的調試器調試 Python 程式的工作目錄? 使用 Visual Studio Code 偵錯 Python 程式時 ( VS Code),指定工作目錄對於確保腳本正確運作至關重要。 要在啟動設定檔(launch.json) 中設定工作目錄,請依照下列步驟操作: 開啟l...
    程式設計 發佈於2024-11-08
  • 為什麼 Matplotlib 的動畫程式碼要使用尾隨逗號?
    為什麼 Matplotlib 的動畫程式碼要使用尾隨逗號?
    揭開Matplotlib動畫中的尾隨逗號:它是逗號運算子嗎? 在使用Matplotlib創建簡單動畫的程式碼片段中,變數行後面可以觀察到逗號:line, = ax.plot(x, np.sin(x))這個逗號讓一些開發者感到困惑,導致有人質疑它是否代表逗號運算子。 消除逗號運算子神話此上下文中的尾隨...
    程式設計 發佈於2024-11-08
  • 在 Laravel 中將花式文本標準化為普通文本
    在 Laravel 中將花式文本標準化為普通文本
    文章源自https://medium.com/@hafiqiqmal93/normalizing-fancy-text-to-normal-text-in-laravel-7d9ed56d5a78 使用者輸入的文字一點也不有趣。隨著 Unicode 在智慧型手機中的出現,用戶現在可以奢侈地(有時甚...
    程式設計 發佈於2024-11-08
  • 4 種頂級 API 測試工具指南
    4 種頂級 API 測試工具指南
    在 API 测试方面,拥有正确的工具可以带来巨大的改变。在本文中,我们将探讨 2024 年可用的一些最佳 API 测试工具,适合各个级别的开发人员。 回声API EchoAPI 是一种新兴且快速发展的 API 开发协作工具。与 Postman 不同,它有几个明显的优势,使其成为 P...
    程式設計 發佈於2024-11-08
  • 如何解決多項目 Gradle 配置中的測試依賴?
    如何解決多項目 Gradle 配置中的測試依賴?
    解決多項目Gradle 配置中的測試依賴關係在Gradle 中處理多項目建置時,必須在跨專案的測試程式碼之間建立有效的依賴關係。考慮專案 A 和專案 B 存在的場景,專案 B 依賴專案 A 的元件。 問題陳述在這種情況下,項目 B 的 build.gradle 可能如下所示:apply plugin...
    程式設計 發佈於2024-11-08
  • 如何在 Rust 中合理地組織你的 Tauri 命令
    如何在 Rust 中合理地組織你的 Tauri 命令
    在建立 Tauri 應用程式時,保持程式碼庫井然有序非常重要,尤其是隨著專案的成長。相信我,作為一個對 Rust 比較陌生的人,我也遇到過不少混亂的情況——花幾個小時把自己從自己挖的坑裡挖出來。如果你跟我一樣,你就會想避免這種情況。那麼,讓我們討論一下如何透過將 Tauri 命令拆分為單獨的檔案來保...
    程式設計 發佈於2024-11-08
  • ## 如何在 Docker 映像中預先快取 Go 依賴項以加快建置速度?
    ## 如何在 Docker 映像中預先快取 Go 依賴項以加快建置速度?
    利用預先快取的依賴關係高效建置 Docker 映像建置 Docker 映像時,最大限度地減少建置時間至關重要。一種策略是快取相依性。然而,這需要先建立依賴項,這可能會很耗時。 有沒有辦法預先建立 go.mod 檔案中列出的多個依賴項? 答案在於利用 Docker 的快取機制。建議的 Dockerfi...
    程式設計 發佈於2024-11-08

免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。

Copyright© 2022 湘ICP备2022001581号-3