如何解决C#LINQ OrderBy on nullable->始终在列表末尾设置空值
是否有一种简单的方法,可以通过升序对可空值列表进行排序,并将空值放在列表末尾?就像一个选项之类的
如果没有,那么哪种方法最好:
-
编写我自己的排序lambda
import Foundation import UIKit class MemberProfilePhotosViewController: UIPageViewController { private let profilePhotoURLs: [URL] private let profilePhotoViewControllers: [MemberProfilePhotoViewController] private var pageControl: UIPageControl? // MARK: - Initialization init(profilePhotoURLs: [URL]) { self.profilePhotoURLs = profilePhotoURLs profilePhotoViewControllers = profilePhotoURLs.map { (profilePhotoURL) -> MemberProfilePhotoViewController in MemberProfilePhotoViewController(profilePhotoURL: profilePhotoURL) } super.init(transitionStyle: .scroll,navigationOrientation: .horizontal,options: nil) } required init?(coder: NSCoder) { fatalError() } // MARK: UIViewController override func loadView() { super.loadView() pageControl = UIPageControl(frame: CGRect.zero) pageControl!.numberOfPages = profilePhotoViewControllers.count self.view.addSubview(pageControl!) } override func viewDidLoad() { super.viewDidLoad() dataSource = self delegate = self if let firstViewController = profilePhotoViewControllers.first { setViewControllers([firstViewController],direction: .forward,animated: true,completion: nil) } } override func viewWillLayoutSubviews() { super.viewWillLayoutSubviews() if let pageControl = pageControl { let pageControlSize = pageControl.size(forNumberOfPages: profilePhotoViewControllers.count) pageControl.frame = CGRect( origin: CGPoint(x: view.frame.midX - pageControlSize.width / 2,y: view.frame.maxY - pageControlSize.height),size: pageControlSize ) } } // MARK: Private Helpers private func indexOf(_ viewController: UIViewController) -> Int? { return profilePhotoViewControllers.firstIndex(of: viewController as! MemberProfilePhotoViewController) } } extension MemberProfilePhotosViewController: UIPageViewControllerDelegate { func pageViewController(_ pageViewController: UIPageViewController,didFinishAnimating finished: Bool,previousViewControllers: [UIViewController],transitionCompleted completed: Bool) { guard let selectedViewController = pageViewController.viewControllers?.first else { return } if let indexOfSelectViewController = indexOf(selectedViewController) { pageControl?.currentPage = indexOfSelectViewController } } } extension MemberProfilePhotosViewController: UIPageViewControllerDataSource { func pageViewController(_ pageViewController: UIPageViewController,viewControllerBefore viewController: UIViewController) -> UIViewController? { guard let viewControllerIndex = profilePhotoViewControllers.firstIndex(of: viewController as! MemberProfilePhotoViewController) else { return nil } let previousIndex = viewControllerIndex - 1 guard previousIndex >= 0 else { return nil } guard profilePhotoViewControllers.count > previousIndex else { return nil } return profilePhotoViewControllers[previousIndex] } func pageViewController(_ pageViewController: UIPageViewController,viewControllerAfter viewController: UIViewController) -> UIViewController? { guard let viewControllerIndex = profilePhotoViewControllers.firstIndex(of: viewController as! MemberProfilePhotoViewController) else { return nil } let nextIndex = viewControllerIndex + 1 let profilePhotoViewControllersCount = profilePhotoViewControllers.count guard profilePhotoViewControllersCount != nextIndex else { return nil } guard profilePhotoViewControllersCount > nextIndex else { return nil } return profilePhotoViewControllers[nextIndex] } }
-
仅对非null值进行排序,并在其后添加null值
list.Sort((v1,v2) => { if (v1.HasValue && v2.HasValue) return v1.CommpareTo(v2); else if (!v1.HasValue) return -1; else if (!v2.HasValue) return 1; else return 0; })
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。